开发者

Trying to understand why my if else statement does not work?

开发者 https://www.devze.com 2023-02-05 18:54 出处:网络
I am quite sure there are better ways of implementing what I am trying to do, and I am just trying different avenues to see what works best for me... So I have a UISegmentedController with 4 segments.

I am quite sure there are better ways of implementing what I am trying to do, and I am just trying different avenues to see what works best for me... So I have a UISegmentedController with 4 segments. I gave each a title in interface Builder and what I am trying to do is when they press a certain segment it will play the corresponding video. I am using a webview because... well that is what i know... so far... here is my code:

-(IBAction) getVideo: (id) sender
{
 NSURL *videoURl;
 NSString *videoURLString;
 NSString *video;

 video = [videoChoice titleForSegmentAtIndex:
   videoChoice.selectedSegmentIndex];

 if (video = @"Shimmy") {
  videoURLString = [[NSString alloc] initWithFormat:
        @"http://www.andalee.com/iPhoneVideos/mov.MOV"];
 } else if (video =开发者_JS百科 @"Camel") {
  videoURLString = [[NSString alloc] initWithFormat:
        @"http://www.andalee.com"];
 } else {
  videoURLString = [[NSString alloc] initWithFormat:
        @"http://www.yahoo.com"];
 }

 videoURl = [[NSURL alloc] initWithString: videoURLString];
 [videoView loadRequest: [NSURLRequest requestWithURL: videoURl]];

 [videoURl release];
 [videoURLString release];
}

So when I use this (video = @"Shimmy") it goes straight to the video but the same for every segment... now if I change it to (video == @"Shimmy") it goes straight to the else and nothing... else. By the way the links right now are irrelevant just trying to understand the mechanics.


When you use one equal sign you're doing an assignment. So:

if (video = @"Shimmy")

This is testing to see if you were able to successfully change video to point to the string @"Shimmy".

Using two equal signs tests for explicit equality. So:

if (video == @"Shimmy")

This tests to see if video is equal and identical to @"Shimmy". Note that the following will be false:

if ([NSMutableString stringWithString:@"Shimmy"] == @"Shimmy")

Because the first string is not the same string as the second string. They may have the same content, but they're not the same object.

What you're looking for is:

if ([video isEqual:@"Shimmy"])

This tests content equality.


In Objective-C the test video == @"Shimmy" compares 2 string objects, while video = @"Shimmy" is an assignment. What you want is:

if ([video isEqualToString:@"Shimmy"])

good luck

P.S. and if we're talking about better practices, you can allocate an NSString, using one of convenience methods and it will be autoreleased later. Like instead of

videoURLString = [[NSString alloc] initWithFormat: @"http://www.yahoo.com"]; 

you can use

videoURLString = [NSString stringWithFormat: @"http://www.yahoo.com"]; 

of cause don't call release in the end.


With video = @"Shimmy" you make an assignment to the variable video. The result of this assignment is @"Shimmy" which is evaluated as not false, so ghe if condition is true and the statement executed.

With == you make a pointer value comparision. This will only be trie in rare cases -exactly when the value has a pointer to exactly the same string. This will never be true if you compare with a ststic @"string".

you need to use a function to compare strings, e.g.

if ([value isEqualToString:@"Shimmy"]) {...}


Well I dont know anything about Objective C , but i guess as per other programming languages , = is just plain assignment and would return true and hence the if loop always evluates, and == checks for the contents.

Try reading up here the difference between equals and == in Objective C

0

精彩评论

暂无评论...
验证码 换一张
取 消