2015-12-02 4 views
1

У меня возникла ошибка при попытке запустить приложение на моем iPhone. Я не понимаю, почему у меня ошибка нуля в этом случае'NSInvalidArgumentException', причина: '*** setObjectForKey: объект не может быть 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

Вы не можете поместить значения nil в словарь. Он потерпит крах.

Что вам действительно нужно исследовать: Откуда берутся эти ноль, и что нужно делать, когда вы получаете нулевые значения? Это то, что вы можете решить. Ответ Мукеша должен у вас, как сохранить пустую строку вместо nil. Это позволяет избежать сбоя. Это часто - это правильная вещь, но не всегда. Поэтому исследуйте, что должно делать ваше приложение, если одно из значений равно нулю, и сделайте так.

+0

Спасибо за ваш ответ. Я все еще хочу улучшить эту часть, но этот ответ помог мне проверить, есть ли другие проблемы. –