我想做的是采用预定义的[self getYear]方法并以一年(即1995)的形式返回NSString,然后取出该数字并将其匹配到实际的年份,并将其设置为URL变量theClassyear。当这个项目运行时,我将它作为-viewWillAppear中的设置方法的一部分,当我拉出视图时(这是在标签栏控制器fyi中)然后我得到NSURL错误101或错误-999。 [self getYear]方法从NSUserDefaults字符串获取字符串,该字符串由UIPicker在控制器推送的不同视图中设置。就像我说的那样,当我第一次打开视图并且这个方法运行时,我从第一个NSLog获得了正确的结果,但随后它运行我的if语句并最终使用else语句设置我应该返回的NSURL null(根据我的NSLog)。稍后在代码中我有另一个NSLog再次打印[self getYear]结果,这也给了我正确的数字。不知怎的,我的if-then逻辑没有正确运行,我会喜欢我可能做错的建议。提前致谢!!! :)
-(NSURL *)theClassYear{
NSURL *theClassYear = [[NSURL alloc] init];
NSLog(@"the user default loaded for the year is: %@",[self getYear]);
if ([self getYear] == @"1995") {
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=35443264449"];
}
else if ([self getYear] == @"1996"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=50371222704"];
}
else if ([self getYear] == @"1997"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=101880069858690"];
}
else if ([self getYear] == @"1998"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=98761155252"];
}
else if ([self getYear] == @"1999"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=34955119113"];
}
else if ([self getYear] == @"2000"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=41438241821"];
}
else if ([self getYear] == @"2001"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=44108047608"];
}
else if ([self getYear] == @"2002"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=98700780436"];
}
else if ([self getYear] == @"2003"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=36811255052"];
}
else if ([self getYear] == @"2004"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=40331531709"];
}
else if ([self getYear] == @"2005"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=97724430117"];
}
else if ([self getYear] == @"2006"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=50868469971"];
}
else if ([self getYear] == @"2007"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=38506528654"];
}
else if ([self getYear] == @"2008"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=55466866222"];
}
else if ([self getYear] == @"2009"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=105187085612"];
}
else if ([self getYear] == @"2010"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=39303927757"];
}
else if ([self getYear] == @"2011"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=281837582821"];
}
else if ([self getYear] == @"2012"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/group.php?gid=79162636609"];
}
else if ([self getYear] == @"2013"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/home.php?sk=group_161338720557447"];
}
else if ([self getYear] == @"2014"){
theClassYear = [NSURL URLWithString:@"http://www.facebook.com/home.php?sk=group_125352334187406"];
}
else {
NSLog(@"no matches");
}
NSLog(@"the url for the year you chose is: %@",theClassYear);
return theClassYear;
[theClassYear release];
}
答案 0 :(得分:2)
更多关于我上面的评论
将这些数据放入plist中,抓住plist(在这种情况下将是一个名为dict的NSDictionary)然后return [NSURL URLWithString:[dict objectForKey:[self getYear]]];
答案 1 :(得分:1)
在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
,就没有任何超过该行的内容被执行,所以你的[theClassYear release]
不会发生。在这种情况下,它实际上也是不必要的。**从URLWithString:
返回的对象是自动释放的,在这种情况下正是你想要的。
最后,请接受Rexeisen关于将所有这些字符串放入字典的建议。它将使您的代码更易于阅读和更易于维护。
*与Python,Perl或PHP等解释性语言或带有运算符重载的编译语言(如C ++)不同。 **事实上,如果它正在运行,它会因过度释放而导致崩溃。