iPhone客户端应用程序崩溃,当它收到NULL作为jsonData参数时。使用第三方JSONKit库,其中包含以下代码行:
- (id)objectWithData:(NSData *)jsonData error:(NSError **)error
{
if(jsonData == NULL) { [NSException raise:NSInvalidArgumentException format:@"The jsonData argument is NULL."]; }
return([self objectWithUTF8String:(const unsigned char *)[jsonData bytes] length:[jsonData length] error:error]);
}
JSONKit文档说:
重要:objectWithUTF8String:和mutableObjectWithUTF8String:如果string为NULL,将引发NSInvalidArgumentException。
问题:我应该如何处理这种情况,以便在这种情况下iPhone应用程序不会崩溃?不是在寻找理论上的异常处理代码,而是提示应用程序如何处理jsonData == NULL情况?
答案 0 :(得分:7)
简单。遵守图书馆的规则,如下:
if (jsonData == nil) {
assert(0 && "there was an error upstream -- handle the error in your app specific way");
return; // not safe to pass nil as json data -- bail
}
// now we are sure jsonData is safe to pass
NSError * error = nil;
id ret = [json objectWithData:jsonData error:&error];
...
答案 1 :(得分:0)
很明显,当没有数据时,库会引发异常(NSException)。如果您不熟悉异常处理的条款,我建议reading about it on wikipedia,然后在Apple's Doc,这是一个非常常见的编程主题。
就问题而言,您需要捕捉 例外:
@try
{
// Do whatever you're doing with the JSON library here.
}
@catch (NSException *exception)
{
// Something happend
if ([exception.name isEqualToString:NSInvalidArgumentException])
{
// This must be the jsonData == NULL.
}
}
@finally
{
// Optional, you can clear things here.
}