试图理解为什么我的if else语句不起作用?

Mik*_*ens 0 iphone if-statement objective-c

我很确定有更好的方法来实现我想要做的事情,我只是尝试不同的途径来看看什么对我最有用......所以我有一个带有4个段的UISegmentedController.我在界面生成器中给了每个标题,我想要做的是当他们按某个片段时会播放相应的视频.我正在使用webview,因为......这就是我所知道的...到目前为止......这是我的代码:

-(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 = @"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];
}
Run Code Online (Sandbox Code Playgroud)

因此,当我使用它(视频= @"Shimmy")时,它直接进入视频,但对于每个片段都是相同的...现在,如果我将其更改为(video == @"Shimmy"),它会直接转到其他部分没有其他的.顺便说一句,现在的链接只是试图了解机制.

Dav*_*ong 6

当你使用一个等号时,你正在做一个任务.所以:

if (video = @"Shimmy")
Run Code Online (Sandbox Code Playgroud)

这是测试您是否能够成功更改video为指向字符串@"Shimmy".

使用两个等号测试显式相等.所以:

if (video == @"Shimmy")
Run Code Online (Sandbox Code Playgroud)

这将测试视频是否相同且相同@"Shimmy".请注意,以下内容将为false:

if ([NSMutableString stringWithString:@"Shimmy"] == @"Shimmy")
Run Code Online (Sandbox Code Playgroud)

因为第一个字符串与第二个字符串不是同一个字符串.它们可能具有相同的内容,但它们不是同一个对象.

你在寻找的是:

if ([video isEqual:@"Shimmy"])
Run Code Online (Sandbox Code Playgroud)

这测试内容相等.