Objective c 分析通知userInfo时出现NSString IntValue异常

Objective c 分析通知userInfo时出现NSString IntValue异常,objective-c,cocoa,nsnotificationcenter,Objective C,Cocoa,Nsnotificationcenter,我正在实现一个登录系统,它使用NSNotificationsuserInfo字典通过通知传递登录信息。字典传递正常,但当我尝试使用IntValue将字典中的一个NSStrings转换为int时,会出现错误。即使当我将dictionary对象复制到另一个字符串时,我也会得到相同的错误,但是对于普通字符串,没有错误。代码: - (void)loginComplete:(NSNotification *) notification { if ([[notification name] isEq

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

- (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
2015-01-13 17:53:06.976 API_test_osx[2867:143430]-[[u_NSArrayM length]:未识别的选择器发送到实例0x600000441d40
2015-01-13 17:53:06.976 API_test_osx[2867:143430]***WebKit在webView中丢弃了一个未捕获的异常:didFinishLoadForFrame:delegate:-[\u NSArrayM length]:发送到实例0x600000441d40的未识别选择器

如果我尝试不转换为int,则可以将该值记录为
NSString
。我做错了什么?

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

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

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

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

您能展示一下如何设置NSNotification的用户信息吗?看这个问题也许有帮助:NSArray没有objectForKey!这很有道理,谢谢你。我使用的第三方代码将这些值放入长度为1的数组中。阻止我得到它的是,我仍然能够将值分配到NSString IVAR中,可能是因为它隐式调用了NSArrays toString方法。我认为你的答案是正确的。我更喜欢使用“NSInteger”而不是“int”和“integerValue”而不是“intValue”。是的,现在就这么做。谢谢