2015-01-13 3 views
1

Я внедряю систему входа в систему, которая использует словарь NSNotificationsuserInfo для передачи информации для входа по уведомлению. Словарь передается в порядке, но когда я пытаюсь преобразовать один из NSStrings в словарь в int, используя IntValue, я получаю ошибку. Даже когда я копирую объект словаря в другую строку, я получаю ту же ошибку, но с нормальной строкой ошибок нет. Код:Исключение NSString IntValue при разборе уведомления userInfo

- (void)loginComplete:(NSNotification *) notification { 
    if ([[notification name] isEqualToString:@"Login Complete"]) { 
     NSDictionary *loginInfo = [notification userInfo]; 

     loginString = [loginInfo objectForKey:@"login_string"]; 
     NSLog(@"%@", loginString); 
     NSString* expString = [NSString stringWithString:[loginInfo objectForKey:@"expires_in"]]; 
     // [loginInfo objectForKey:@"expires_in"] == @"604700" 
     expiresIn = [expString intValue]; 
     NSLog(@"expiresIn: %i", expiresIn); 

     NSString * toInt = @"112345"; 
     int realInt = [toInt intValue]; 
     NSLog(@"realInt: %i", realInt); 
    } 
} 

Таким образом, первый NSLog обеспечивает правильную информацию, а также преобразование в конце (тест) также работает, но результаты expiresIn с ошибкой:

2015-01-13 17:53:06.976 API_test_osx[2867:143430] -[__NSArrayM length]: unrecognized selector sent to instance 0x600000441d40 
2015-01-13 17:53:06.976 API_test_osx[2867:143430] *** WebKit discarded an uncaught exception in the webView:didFinishLoadForFrame: delegate: <NSInvalidArgumentException> -[__NSArrayM length]: unrecognized selector sent to instance 0x600000441d40 

Если я стараюсь не превращать к int, значение может быть зарегистрировано просто отлично, как NSString. Что я делаю не так?

+0

Можете ли вы показать, как вы установили пользовательскую информацию NSNotification? Посмотрите этот вопрос, может быть, помогите: http://stackoverflow.com/questions/7896646/how-to-pass-object-with-nsnotificationcenter NSArray не имеет объектаForKey! – weso

ответ

2

Объект вы думаете, это NSString является фактически NSArray как показывает сообщение об ошибке:

-[__NSArrayM length]: unrecognized selector sent to instance 0x600000441d40 

Я не могу предоставить больше информации, чем, другие, чтобы сказать, что если вы передаете вокруг целых чисел в пределах Класс коллекции Objective-C затем использует объект NSNumber, а не объект NSString.

+0

Это имеет смысл, спасибо. Используемый мной код третьей стороны сделал значения в массивы длиной 1. Что мешало мне получить это, так это то, что я все еще мог назначать значения в NSString ivars, потому что он неявно называл метод NSArrays toString. Я отмечаю ваш ответ как правильный. – MarekB

+0

Также предпочитайте использовать «NSInteger», а не «int» и «integerValue», а не «intValue». – KirkSpaziani

0

Похоже, что вы получаете доступ к массиву объектов под указанным вами ключом. Вам также потребуется получить доступ к значению индекса объектов. Т.е. objectAtIndex. Надеюсь, это поможет

+0

Да, сделайте это сейчас. Благодарю. – MarekB

Смежные вопросы