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

时间:2011-01-18 05:47:42

标签: iphone objective-c if-statement

我很确定有更好的方法来实现我想要做的事情,我只是尝试不同的途径来看看什么对我最有用......所以我有一个带有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];
}

因此,当我使用它(视频= @“Shimmy”)时,它会直接进入视频,但对于每个片段都是一样的...现在,如果我将其更改为(video == @“Shimmy”),它会直接进入别的,没什么......别的。顺便说一句,现在的链接只是试图理解机制而无关紧要。

4 个答案:

答案 0 :(得分:6)

当你使用一个等号时,你正在做作业。所以:

if (video = @"Shimmy")

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

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

if (video == @"Shimmy")

此测试用于查看视频是否与@"Shimmy"相同且相同。请注意,以下内容为 false

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

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

您正在寻找的是:

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

这测试内容相等。

答案 1 :(得分:3)

在Objective-C中,测试video == @"Shimmy"比较了2个字符串对象,而video = @"Shimmy"是一个赋值。你想要的是:

if ([video isEqualToString:@"Shimmy"])
祝你好运

P.S。如果我们谈论更好的实践,你可以使用一种便捷方法分配一个NSString,它将在以后自动释放。而不是

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

你可以使用

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

因为最后不要调用release。

答案 2 :(得分:1)

使用video = @“Shimmy”,您可以对变量视频进行分配。这个赋值的结果是@“Shimmy”,它被评估为非假,所以如果条件为真并且语句已执行。

使用==进行指针值比较。在极少数情况下,这只是特里 - 当值具有指向完全相同字符串的指针时。如果你用一个ststic @“字符串”进行比较,这将永远不会成真。

您需要使用函数来比较字符串,例如

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

答案 3 :(得分:0)

我对Objective C一无所知,但我猜其他编程语言, =只是普通的赋值,并且会返回true,因此if循环总是会褪色, 和==检查内容。

尝试阅读here目标C中等于和==之间的差异