我在使用url的格式说明符时遇到问题。使用zBar扫描仪扫描php链接。我花了很多时间在这里研究溢出但我找不到答案。
这是我在viewcontroller.m中使用的代码:
NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://mywebsite.co.uk/TM.php?id=%@",self.scannedValue]]];
//NSData *jsonData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Sample" ofType:@"JSON"]];
NSArray *jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:Nil];
我正在尝试获取id之后的部分以获取任何整数,例如200
,201
,202
,203
,...
出于某种奇怪的原因,只有在我将数字键入id=201
或id=202
时,它才有效。
当我NSLog
使用NSLog(@"%@",scannedValue)
时,它显示以下内容:
2014-02-26 21:45:27.185 MeCombine[2412:60b] http://mywebsite.co.uk/TM.php?id=201
2014-02-26 21:45:27.277 MeCombine[2412:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data parameter is nil'
有人能告诉我为什么会这样吗?
一些注意事项:
scansValue = sym.data;
是字符串,sum
是ZBarSymbol
类对象
在ZBarSymbol
班级
@property (readonly, nonatomic) NSString *data;
是起始值。
成功扫描值后,它将在委托方法中返回NSString *data
。
答案 0 :(得分:0)
我只能提供一个猜测,因为我没有看到你的所有代码,但这就是我的想法:
您的http链接格式不正确(http::
而不是http:
)。 jsonData
对象如果因任何原因无法加载网址,则为nil
。
您不进行任何空检查,并且此nil
对象将被发送到您的json数据的任何方法处理,如果数据对象为零,则会抛出NSInvalidArgumentException
。
答案 1 :(得分:0)
NSData的+dataWithContentsOfURL:
不允许使用nil URL,在这种情况下由于URL格式不正确而发生,请注意您有两个:在http之后的URL中。正确的URL将是。
http://mywebsite.co.uk/TM.php?id=%@
构建URL的现代且可能更加万无一失的方法是使用NSURLComponents(iOS 7和OS X 10.9)
NSURLComponents *comps = [NSURLComponents componentsWithString:@"http://www.mywebsite.co.uk"];
comps.query = [NSString stringWithFormat:@"id=%@", self.scannedValue];
comps.path = @"/TM.php";
NSURL *URL = comps.URL;
主要的好处是能够将基本URL隔离成一个常量字符串,然后改变来自其他地方的查询/路径,这使得事情比代码中的硬编码值更加模块化和易于维护。