解析通知userInfo时出现NSString IntValue异常

时间:2015-01-13 16:01:28

标签: objective-c cocoa nsnotificationcenter

我正在实施一个使用NSNotifications userInfo字典通过通知传递登录信息的登录系统。字典传递正常但是当我尝试使用IntValue将字典中的NSStrings之一转换为int时,我得到错误。即使我将字典对象复制到另一个字符串,我也会得到相同的错误,但是使用普通字符串时没有错误。代码:

- (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。我做错了什么?

2 个答案:

答案 0 :(得分:2)

您认为NSString的对象实际上是NSArray,如错误消息所示:

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

我无法提供更多信息,除此之外,如果您在Objective-C集合类中传递整数,则使用NSNumber对象,而不是NSString对象。

答案 1 :(得分:0)

看起来您正在访问指定键下的对象数组。您还需要访问对象索引值。即objectAtIndex。希望这有帮助