'NSInvalidArgumentException',原因:'data parameter is nil'

时间:2012-03-07 14:53:17

标签: ios objective-c iphone

XCode新手在这里,我一直试图弄清楚为什么会发生以下情况...

使用当前编写代码的方式,我不断收到'NSInvalidArgumentException'。

  

原因:xcode中的'data parameter is nil'。网址在浏览器上运行正常。

当我删除网址的“filters =%7B%22region%22%3A%22CA%22%7D”部分时,它在Xcode中工作正常,但是当包含该网址的这一部分时,那就是我得到的错误消息。我已经尝试使用\“代替%22但仍然没有。任何建议都非常感谢。

NSURL *url = [NSURL URLWithString:[@"http://api.v3.factual.com/t/restaurants-us?q=peets+coffee&filters=%7B%22region%22%3A%22CA%22%7D&KEY=p7kwKMFUSyVi64FxnqWmeSDEI41kzE3vNWmwY9Zi"stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData *data = [NSData dataWithContentsOfURL: url];

6 个答案:

答案 0 :(得分:7)

我也有同样的问题:

  

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'data parameter is nil'

但我已经解决了。原因是我的API网址不正确。请查看您的API网址。祝你好运!

答案 1 :(得分:6)

您发布的代码无需崩溃,但数据对象最终为nil

稍后在代码中的某个时刻,您可以访问data。自data == nil以来,应用程序崩溃了。

我建议输入

http://api.v3.factual.com/t/restaurants-us?q=peets+coffee&filters=%7B%22region%22%3A%22CA%22%7D&KEY=p7kwKMFUSyVi64FxnqWmeSDEI41kzE3vNWmwY9Zi

http://api.v3.factual.com/t/restaurants-us?q=peets+coffee&KEY=p7kwKMFUSyVi64FxnqWmeSDEI41kzE3vNWmwY9Zi

进入浏览器以了解情况

更新

问题是编码已编码的字符串。 (%的编码为%25)

NSString *urlBase = @"http://api.v3.factual.com/t/restaurants-us?";
NSString *urlData = [@"q=peets+coffee&filters={\"region\":\"CA\"}&KEY=p7kwKMFUSyVi64FxnqWmeSDEI41kzE3vNWmwY9Zi"stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",urlBase,urlData]];
NSData* data = [NSData dataWithContentsOfURL: url];

可以使用,因为您正在编码非编码字符串。

OR

NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://api.v3.factual.com/t/restaurants-us?q=peets+coffee&filters=%7B%22region%22%3A%22CA%22%7D&KEY=p7kwKMFUSyVi64FxnqWmeSDEI41kzE3vNWmwY9Zi"]];
NSData* data = [NSData dataWithContentsOfURL: url];

可行,因为您的帖子已经正确编码了

答案 2 :(得分:1)

我有同样的问题,我在服务名称中找到一个大写字母,而实际上它在服务器上较低。我确实修改了URL中的名称并解决了问题。感谢。

答案 3 :(得分:1)

我认为应用程序在离线模式下崩溃并且您尝试了NSJSONSerialization数据。感谢

答案 4 :(得分:1)

就我而言,我忘记在App Transport Security Settings中添加.plist

所以,只需转到.plist并添加App Transport Security Settings,然后Allow Arbitrary Loads加入

答案 5 :(得分:0)

我遇到了同样的问题。我发现错误的产生是因为我使用NSURLSession下载某些内容的URL已经无效。删除操作解决了我的问题。