使用jsonData参数的iPhone崩溃为NULL

时间:2011-08-29 04:21:53

标签: iphone json

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情况?

2 个答案:

答案 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.
}