将NSDictionary的密钥转换为NSNumber

时间:2011-07-18 21:50:05

标签: objective-c nsdictionary

如何将密钥转换为NSNumber?这段代码给了我错误:

无论我如何尝试,我总是最终得到错误:不兼容的整数到指针转换从'NSIntegar'(又名'int')分配给'NSNumber'。

        for (id key in consultants)
    {
        consultantData = [[ConsultantData alloc] init];

        consultantData.name = [consultants objectForKey:key];
        consultantData.conID = [[NSNumber numberWithInteger:key] integerValue];

        NSLog(@"name: %@    ID: %@", consultantData.name, consultantData.conID);

        [consultantList addObject:consultantData];
        [consultantData release];
    }

这是我的对象ConsultantData:

#import <Foundation/Foundation.h>

@interface ConsultantData : NSObject 
{
    NSString *name;
    NSNumber *conID;
}

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSNumber *conID;

@end

#import "ConsultantData.h"


@implementation ConsultantData

@synthesize name;
@synthesize conID;

-(void) dealloc
{
    [name release];
    [conID release];

    [super dealloc];
}

@end

如果我尝试isMemberOfClass,它永远不会返回true。如果我尝试isKindOfClass,它会告诉我它是一个NSString。

顾问是我从我的服务器接收的字典,它通过XMLRPC函数传递(服务器是PHP)。从我所看到的,一切都是服务器字典中的字符串返回。

4 个答案:

答案 0 :(得分:2)

可能是你的订单错了。

consultantData.conID = [[NSNumber numberWithInteger:key] integerValue];

表示

NSNumber *foo = [NSNumber numberWithInteger:key];
NSInteger bar = [foo integerValue];
consultantData.conID = bar;
你可能想要

consultantData.conID = [NSNumber numberWithInteger:[key integerValue]];

以详细形式:

NSInteger foo = [key integerValue];
NSNumber *bar = [NSNumber numberWithInteger:foo];
consultantData.conID = bar;

答案 1 :(得分:1)

  

consultantData.conID = [[NSNumber numberWithInteger:key] integerValue];

以上一行应为:

consultantData.conID = [NSNumber numberWithInteger:[key integerValue]];

答案 2 :(得分:1)

假设您的密钥是NSString,则无法将密钥传递给[NSNumber numberWithInteger:key],因为它不是整数!使用键上的intValue方法获取一个整数,然后将整数转换为NSNumber,如下所示:

consultantData.conID = [NSNumber numberWithInteger:[key intValue]];

答案 3 :(得分:0)

integerValue返回NSInteger,它不是NSNumber。你应该直接传递NSNumber:

consultantData.conID = [NSNumber numberWithInteger:[key integerValue]];