使用 isEqualToString 时访问错误
Posted
技术标签:
【中文标题】使用 isEqualToString 时访问错误【英文标题】:Bad Access when using isEqualToString 【发布时间】:2012-07-12 19:06:50 【问题描述】:好吧,这让我很烦。我有以下代码:
weatherAddress = [NSString stringWithFormat:@"http://google.com"];
weatherUrl = [NSURL URLWithString:weatherAddress];
weatherContents = [NSString stringWithContentsOfURL:weatherUrl encoding:NSASCIIStringEncoding error:nil];
if ([viewer.request.URL.relativeString isEqualToString:weatherContents])
//do stuff
但是当它运行时,它有时会抛出错误的访问。当我说有时我的意思是通常 50% 的时间。我做错了什么?
【问题讨论】:
viewer.request.URL.relativeString
的值是多少?是否已解除分配?调试器在异常停止时会向您显示什么?
您发布的代码的第一行有错误。 @"http://google.com
缺少结束双引号。您实际上是从项目中复制/粘贴此代码,还是重新输入?
尝试传递NSError *error
而不是nil
,看看是否返回错误
你确定weatherContents 不为零吗?尝试在 if 语句之前添加一个额外的检查,以确保它不是 nil。
绝对不是零。 viewer.request...etc 总是给出当前的 url。哦,是的,那只是顶部的一个错字
【参考方案1】:
这个怎么样,假设weatherContents是在类中定义的:
weatherAddress = [NSString stringWithFormat:@"http://google.com"];
weatherUrl = [NSURL URLWithString:weatherAddress];
weatherContents = [NSString stringWithContentsOfURL:weatherUrl encoding:NSASCIIStringEncoding error:nil];
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(checkIfWeatherReceived) userInfo:nil repeats:NO];
然后创建一个名为checkIfWeatherReceived
的方法,如下所示:
-(void) checkIfWeatherReceived
if(weatherContents)
if ([viewer.request.URL.relativeString isEqualToString:weatherContents])
//do stuff
else
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(checkIfWeatherReceived) userInfo:nil repeats:NO];
我真的不喜欢使用会在您的连接中断时锁定您的界面的东西,所以我会避免只是“让它等待”之类的。如果天气数据已被抓取,这将每半秒检查一次。如果您希望它检查得更快,只需更改 TimeInterval。如果您在数据中没有发现太多延迟,您可能希望它非常快,例如 .01 或其他东西。您还应该考虑如果连接丢失并且您永远无法获取数据会发生什么,除非您已经考虑了这一点。我没有对此进行测试,但我认为它应该可以解决,假设您的所有部分都是类的一部分而不是方法的本地部分。我也可能会将checkIfWeatherReceived
的实际工作分解为另一种方法,而不是将其放在if(weatherContents)
真正的区域中。
【讨论】:
以上是关于使用 isEqualToString 时访问错误的主要内容,如果未能解决你的问题,请参考以下文章
iOS:寻找 NSDictionary 值时出现错误:[__NSCFNumber isEqualToString:]: unrecognized selector sent to instanc
ios [__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x7a97d4c0'报错
使用类似containsString的方法替换方法isEqualToString:for UITextField response [duplicate]