2015-12-02 80 views
1

我试图在我的iPhone上运行应用程序时出错。我不明白为什么我在这种情况下有一个零错误'NSInvalidArgumentException',原因:'*** setObjectForKey:object can not be nil(key:device_uid)'

> Terminating app due to uncaught exception 'NSInvalidArgumentException',<br/> 
> reason: ' setObjectForKey: object cannot be nil (key: device_id)'<br/> 
> First throw call stack:<br/> 
    (0x183ce0f48 0x19918bf80 0x183bcc4e0 0x10006f5f0 0x1002b9ca8 0x1002b9c68 0x1002bf710 0x183c981f8 0x183c96060 0x183bc4ca0 0x18f148088 0x1892dcffc 0x1000716a0 0x1999ce8b8)<br/> 
    libc++abi.dylib: terminating with uncaught exception of type NSException 

Here is the part of appdelegate.m file concerned by this error : 

// 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/"]; 

是否这个方法已被弃用?

回答

5

您在标识符中得到零。所以请检查它是这样的

NSString *identifier = [dict stringForKey:@"identifier"]; 

if([identifier length] != 0) 
    [postDatas setObject:identifier forKey:@"device_uid"]; 
else 
    [postDatas setObject:@"" forKey:@"device_uid"]; 
+0

感谢您的回答。 不幸的是,它不工作,错误仍然在这里 –

+0

@SiberianScout你正在得到什么错误? –

+0

完全一样。这就是为什么这个错误让我疯狂:) –

1

你不能把零值放到字典中。它会崩溃。

你真正需要调查的是:这些零值来自哪里,当你得到零值时什么是适当的做法?只有你可以决定。穆克什的答案应该是你如何存储一个空字符串而不是零。这避免了崩溃。它经常是正确的事情,但并非总是如此。因此,如果其中一个值为零,请调查您的应用应该执行的操作,并使其完成该操作。

+0

感谢您的回答。我仍然希望改进这部分,但这个答案帮助我检查是否还有其他问题。 –

相关问题