当我运行我的应用程序并且没有互联网连接时,它会直接终止我的应用程序并显示此消息。
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data parameter is nil
- (void)viewDidLoad
{
response = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://example.com/jsonTest.php"]];
NSError *parseError = nil;
jsonArray = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingAllowFragments error:&parseError];
jsonArray1 = [[NSMutableArray alloc] init];
for(int i=0;i<[jsonArray count];i++)
{
...
..
.
}
}
我已经尝试过以下代码来显示警报视图,但没有显示任何内容,我做错了什么?
-(void)uploadRequestFailed:(NSJSONSerialization *)request
{
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"No internet connection" message:@"Please check the internet connection" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
答案 0 :(得分:2)
如果您没有互联网连接,您的回复对象将为零。这样,您的NSJSONSerialization调用将引发异常,因为第一个参数是nil。
在假设您可以使用它实例化JSON之前,您应该检查响应是否为nil。
答案 1 :(得分:1)
像这样的条件
if(response!=nil) {
jsonArray = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingAllowFragments error:&parseError];
jsonArray1 = [[NSMutableArray alloc] init];
for(int i=0;i<[jsonArray count];i++)
{
...
..
.
}
}
答案 2 :(得分:1)
这是因为你正在做网络摄像头并从服务器获取数据
response = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://example.com/jsonTest.php"]];
但没有活动连接,因此您将无法获得响应变量。当你将该响应传递给jsonarray时无法解析它。所以发生错误。我会建议在进行网络连接之前检查互联网连接。如果有活动连接,那么只有你可以拨打服务器。你可以检查这样的互联网连接:
- (BOOL) connectedToNetwork
{
// Create zero addy
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
// Recover reachability flags
SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
SCNetworkReachabilityFlags flags;
BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
if (!didRetrieveFlags)
{
return NO;
}
BOOL isReachable = flags & kSCNetworkFlagsReachable;
BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
return (isReachable && !needsConnection) ? YES : NO;
}
让这段代码工作添加库:
SystemConfiguration.framework
并将其导入您的班级
#import <SystemConfiguration/SystemConfiguration.h>
希望它能帮助!!