首页 文章

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

提问于
浏览
1

我正在尝试在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" ];

    }

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

方式是这样的?

2 回答

  • 2

    您将 UserID 传递给 numberWithInteger: ,后者需要 NSInteger . 这与 setObject: 无关 . 您可能希望复制 UserID 或直接将 UserID 传递给 setObject: .

  • 1

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

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

    附:这只是解决问题的一种可能方法 .

相关问题