尝试在NSMutableDictionary中设置Number类型的对象并得到奇怪的警告

时间:2012-02-26 20:55:11

标签: iphone compiler-warnings nsmutabledictionary nsnumber

我试着在NSMutableDictionary中设置setObject并得到奇怪的警告听到的是代码

if ([errorCode intValue] != -1) {
    NSLog(@"after getting data back");
    NSString *userName = [[protocol3Replay valueForKeyPath:uName]autorelease];
    NSString *userPassword = [[protocol3Replay valueForKeyPath:pass]autorelease];
    NSNumber *UserId = [[protocol3Replay valueForKeyPath:@"Session.user_id"]autorelease];
    NSNumber *customerId = [[protocol3Replay valueForKeyPath:@"Session.customer_id"]autorelease];

    BOOL b = [file checkFile];
    NSLog(@"after check file exists");
    if (b == YES) {
       NSLog(@"file exist"); 
        NSMutableDictionary *fileDic = [[[NSMutableDictionary alloc]init]autorelease];

        fileDic = [file readFile];

        [fileDic setObject:[NSNumber numberWithInteger:UserId] forKey:@"user_id"];
        [fileDic  setObject:token forKey:@"device_token"];
        [fileDic setObject:[NSNumber numberWithInteger:customerId] forKey:@"customer_id"];
        [fileDic setObject:userName forKey:@"user_name" ];
        [fileDic setObject:userPassword forKey:@"user_password" ];

    }

the waning si:警告:语义问题:指向整数转换的指针不兼容发送' NSNumber *'参数类型' NSInteger' (又名' int')

方式是什么?

2 个答案:

答案 0 :(得分:2)

您将UserID传递给numberWithInteger:NSInteger。这与setObject:无关。您可能希望复制UserID或直接将UserID传递给setObject:

答案 1 :(得分:1)

UserID是一个OBJECT,numberWithInteger的参数是NSInteger,它只是一个整数。 NSInteger不是NSNumber或NSObject的子类。它不是指针,而是整数。

所以你的声明NSNumber * UserID = ...应该是NSInteger userID(没有*因为它不是指针)。

P.S。这只是解决问题的一种可能方法。