преобразовать ключ NSDictionary в NSNumber - PullRequest
0 голосов
/ 19 июля 2011

Как я могу преобразовать ключ в NSNumber? этот код дает мне ошибку:

Независимо от того, как я это пробую, я всегда получаю сообщение об ошибке: несовместимое преобразование целого в указатель, присваивающее NSNumber из NSIntegar (он же int).

        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.

consultants - это словарь, который я получаю от своего сервера, который проходит через функцию XMLRPC (сервер - PHP). из того, что я видел, все возвращается в словарь сервера.

Ответы [ 4 ]

2 голосов
/ 19 июля 2011

может означать, что у вас неправильный порядок.

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

означает

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

вы, вероятно, хотите

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

в подробном виде:1010 *

NSInteger foo = [key integerValue];
NSNumber *bar = [NSNumber numberWithInteger:foo];
consultantData.conID = bar;
1 голос
/ 19 июля 2011

Предполагая, что ваш ключ является строкой NSSt, вы не можете передать ключ [NSNumber numberWithInteger: key], потому что он не является целым числом!Используйте метод intValue для ключа, чтобы получить целое число, а затем преобразовать целое число в NSNumber следующим образом:

consultantData.conID = [NSNumber numberWithInteger:[key intValue]];
1 голос
/ 19 июля 2011

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

Вышеприведенная строка должна быть:

consultantData.conID = [NSNumber numberWithInteger:[key integerValue]];
0 голосов
/ 19 июля 2011

integerValue возвращает NSInteger, который не является NSNumber. Вы должны передать NSNumber напрямую:

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