'NSInvalidArgumentException',原因:'*** setObjectForKey:对象不能为 nil(键:device_uid)'
'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: device_uid)'
我在 iPhone 上尝试 运行 应用程序时出错。我不明白为什么在这种情况下我有一个零错误
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: ' setObjectForKey: object cannot be nil (key: device_id)'
First throw call stack: (0x183ce0f48 0x19918bf80 0x183bcc4e0 0x10006f5f0 0x1002b9ca8 0x1002b9c68 0x1002bf710 0x183c981f8 0x183c96060 0x183bc4ca0 0x18f148088 0x1892dcffc 0x1000716a0 0x1999ce8b8)
libc++abi.dylib: terminating with uncaught exception of type NSException
这是 appdelegate.m 文件中与此错误相关的部分:
// Get the users Device Model, Display Name, Token & Version Number
UIDevice *device = [UIDevice currentDevice];
NSUserDefaults *dict = [NSUserDefaults standardUserDefaults];
NSString *identifier = [dict stringForKey:@"identifier"];
NSString *deviceName = device.name;
NSString *deviceModel = device.model;
NSString *deviceSystemVersion = device.systemVersion;
// Prepare the Device Token for Registration (remove spaces and < >)
NSString *deviceToken = [[[[token description]
stringByReplacingOccurrencesOfString:@"<"withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString: @" " withString: @""];
NSMutableDictionary *postDatas = [NSMutableDictionary dictionary];
[postDatas setObject:appName forKey:@"app_name"];
[postDatas setObject:appVersion forKey:@"app_version"];
[postDatas setObject:identifier forKey:@"device_uid"];
[postDatas setObject:deviceToken forKey:@"device_token"];
[postDatas setObject:deviceName forKey:@"device_name"];
[postDatas setObject:deviceModel forKey:@"device_model"];
[postDatas setObject:deviceSystemVersion forKey:@"device_version"];
[postDatas setObject:pushBadge forKey:@"push_badge"];
[postDatas setObject:pushAlert forKey:@"push_alert"];
[postDatas setObject:pushSound forKey:@"push_sound"];
Request *request = [Request alloc];
request.delegate = self;
[request postDatas:postDatas withUrl:@"push/iphone/registerdevice/"];
是否弃用了此方法?
您在标识符中得到的是 nil。所以请这样检查
NSString *identifier = [dict stringForKey:@"identifier"];
if([identifier length] != 0)
[postDatas setObject:identifier forKey:@"device_uid"];
else
[postDatas setObject:@"" forKey:@"device_uid"];
您不能将 nil 值放入字典中。它会崩溃。
你真正需要调查的是:这些 nil 值从何而来,当你得到 nil 值时应该做什么?那是只有你才能决定的事情。 Mukesh 的回答是你应该如何存储一个空字符串而不是 nil。这样就避免了崩溃。 经常是正确的做法,但并非总是如此。因此,如果其中一个值为 nil,请调查您的应用程序应该做什么,并使其完全按照该操作执行。
我在 iPhone 上尝试 运行 应用程序时出错。我不明白为什么在这种情况下我有一个零错误
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: ' setObjectForKey: object cannot be nil (key: device_id)'
First throw call stack: (0x183ce0f48 0x19918bf80 0x183bcc4e0 0x10006f5f0 0x1002b9ca8 0x1002b9c68 0x1002bf710 0x183c981f8 0x183c96060 0x183bc4ca0 0x18f148088 0x1892dcffc 0x1000716a0 0x1999ce8b8)
libc++abi.dylib: terminating with uncaught exception of type NSException
这是 appdelegate.m 文件中与此错误相关的部分:
// Get the users Device Model, Display Name, Token & Version Number
UIDevice *device = [UIDevice currentDevice];
NSUserDefaults *dict = [NSUserDefaults standardUserDefaults];
NSString *identifier = [dict stringForKey:@"identifier"];
NSString *deviceName = device.name;
NSString *deviceModel = device.model;
NSString *deviceSystemVersion = device.systemVersion;
// Prepare the Device Token for Registration (remove spaces and < >)
NSString *deviceToken = [[[[token description]
stringByReplacingOccurrencesOfString:@"<"withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString: @" " withString: @""];
NSMutableDictionary *postDatas = [NSMutableDictionary dictionary];
[postDatas setObject:appName forKey:@"app_name"];
[postDatas setObject:appVersion forKey:@"app_version"];
[postDatas setObject:identifier forKey:@"device_uid"];
[postDatas setObject:deviceToken forKey:@"device_token"];
[postDatas setObject:deviceName forKey:@"device_name"];
[postDatas setObject:deviceModel forKey:@"device_model"];
[postDatas setObject:deviceSystemVersion forKey:@"device_version"];
[postDatas setObject:pushBadge forKey:@"push_badge"];
[postDatas setObject:pushAlert forKey:@"push_alert"];
[postDatas setObject:pushSound forKey:@"push_sound"];
Request *request = [Request alloc];
request.delegate = self;
[request postDatas:postDatas withUrl:@"push/iphone/registerdevice/"];
是否弃用了此方法?
您在标识符中得到的是 nil。所以请这样检查
NSString *identifier = [dict stringForKey:@"identifier"];
if([identifier length] != 0)
[postDatas setObject:identifier forKey:@"device_uid"];
else
[postDatas setObject:@"" forKey:@"device_uid"];
您不能将 nil 值放入字典中。它会崩溃。
你真正需要调查的是:这些 nil 值从何而来,当你得到 nil 值时应该做什么?那是只有你才能决定的事情。 Mukesh 的回答是你应该如何存储一个空字符串而不是 nil。这样就避免了崩溃。 经常是正确的做法,但并非总是如此。因此,如果其中一个值为 nil,请调查您的应用程序应该做什么,并使其完全按照该操作执行。