Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如果Then语句混乱,NSURL结果不太正确_Iphone_Ios_String Comparison - Fatal编程技术网

Iphone 如果Then语句混乱,NSURL结果不太正确

Iphone 如果Then语句混乱,NSURL结果不太正确,iphone,ios,string-comparison,Iphone,Ios,String Comparison,我想做的是采用[self getYear]方法,该方法是预定义的,并以年份(即1995年)的形式返回NSString,然后获取该数字并将其与实际年份进行匹配,并将其设置为URL变量ClassYear。当这个项目运行时,我在-viewwillbeen中有一个设置方法,当我打开视图(这在选项卡栏控制器中供参考)时,我会得到一个NSURL错误101或错误-999。[self getYear]方法从NSUserDefaults字符串中获取其字符串,该字符串由UIPicker在控制器推送的不同视图中设置。

我想做的是采用[self getYear]方法,该方法是预定义的,并以年份(即1995年)的形式返回NSString,然后获取该数字并将其与实际年份进行匹配,并将其设置为URL变量ClassYear。当这个项目运行时,我在-viewwillbeen中有一个设置方法,当我打开视图(这在选项卡栏控制器中供参考)时,我会得到一个NSURL错误101或错误-999。[self getYear]方法从NSUserDefaults字符串中获取其字符串,该字符串由UIPicker在控制器推送的不同视图中设置。正如我所说,当我第一次打开视图并运行此方法时,我从第一个NSLog中获得正确的结果,但随后它通过我的if语句运行,并最终使用else语句,该语句将我的NSURL设置为null(根据我的NSLog)。稍后在代码中,我有另一个NSLog,它再次打印[self getYear]结果,并给出正确的数字。不知何故,我的if-then逻辑并没有正确运行,我希望得到关于我可能做错了什么的建议。提前谢谢!!!:)


}

更多关于我上面的评论


将此数据放入plist,抓取plist(在本例中,它将是一个名为dict的NSDictionary),然后
返回[nsurlurlwithstring:[dict objectForKey:[self getYear]]

更多关于我上面的评论


将此数据放入plist,抓取plist(在本例中,它将是一个名为dict的NSDictionary),然后
返回[nsurlurlwithstring:[dict objectForKey:[self getYear]]

当您在Objective-C中对对象(如
NSString
)使用
=
时,您并不是在比较对象的值,而是在比较对象的内存地址。*如果您有两个字符串,并且您想查看它们的内容是否相同,则必须如Mahesh所述,使用
IsequalString:
,哪个比较正确

在您的代码中还有一些其他可以改进的地方。首先,您正在泄漏一个
NSURL
。您首先使用

NSURL *theClassYear = [[NSURL alloc] init];
然后忽略它并在if的一个分支中创建另一个:

theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=35443264449"];
// This creates a new NSURL instance and leaks the old one.
要解决此问题,只需删除初始赋值并将其作为声明:

NSURL * theClassYear;   // You will assign to this name later, in a branch
接下来,正如Mahesh所指出的,一旦你在一个方法中说了
return
,超过这一行的任何内容都不会被执行,所以你的
[classyear release]
不会发生。在本例中,它实际上也没有必要。**从
URLWithString:
返回的对象是自动删除的,在本例中,这正是您想要的

最后,请接受雷克塞森关于将所有这些字符串放入字典的建议。它将使您的代码更易于阅读和维护


不同于解释语言,如Python、Perl或PHP,或编译语言,操作符重载,如C++。


**事实上,如果它正在运行,则会由于过度扩展而导致崩溃。

当您在Objective-C中对对象(如
NSString
)使用
=
时,您不是在比较对象的值,而是比较对象的内存地址。*如果您有两个字符串,并且希望查看它们的内容是否相同,则必须,正如Mahesh所提到的,使用
isEqualToString:
,它可以进行正确的比较

在您的代码中还有一些其他可以改进的地方。首先,您正在泄漏一个
NSURL
。您首先使用

NSURL *theClassYear = [[NSURL alloc] init];
然后忽略它并在if的一个分支中创建另一个:

theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=35443264449"];
// This creates a new NSURL instance and leaks the old one.
要解决此问题,只需删除初始赋值并将其作为声明:

NSURL * theClassYear;   // You will assign to this name later, in a branch
接下来,正如Mahesh所指出的,一旦你在一个方法中说了
return
,超过这一行的任何内容都不会被执行,所以你的
[classyear release]
不会发生。在本例中,它实际上也没有必要。**从
URLWithString:
返回的对象是自动删除的,在本例中,这正是您想要的

最后,请接受雷克塞森关于将所有这些字符串放入字典的建议。它将使您的代码更易于阅读和维护


不同于解释语言,如Python、Perl或PHP,或编译语言,操作符重载,如C++。


**事实上,如果它正在运行,它会因为过度扩展而导致崩溃。

这是在为NSDictionary尖叫。@Rexeisen:它尖叫得太大声了,我从头版听到了。这是在为NSDictionary尖叫。@Rexeisen:它尖叫得太大声了,我是从头版上听到的。刚发完帖子,我就意识到了我的漏洞,只是做了一个iVar,谢谢你的帮助!信息量很大的帖子noobie@brandon:看到您(现在已删除的评论)对Rexeisen的回答。请考虑使用字典。这绝对是他们的经典用例。当你有机会的时候,看看这个。不过,很高兴我能帮忙!祝你好运就在我发布后,我意识到我的漏洞,只是做了一个iVar,但谢谢你的帮助!信息量很大的帖子noobie@brandon:看到您(现在已删除的评论)对Rexeisen的回答。请考虑使用字典。这绝对是他们的经典用例。当你有机会的时候,看看这个。不过,很高兴我能帮忙!祝你好运