Получите целое число из списка для iPhone-разработчика Objective-C - PullRequest
1 голос
/ 26 октября 2010

У меня есть следующий DataAll.plist:

<array>
    <dict>
        <key>ID</key>
        <integer>1</integer>
        <key>Name</key>
        <string>Inigo Montoya</string>
    </dict>
  ....
</array>

Я хочу получить из него значение идентификатора.Мой код получает имя правильно, но идентификатор странное значение.Вот что я делаю:

NSBundle *bundle = [NSBundle mainBundle];
NSString *plistPath = [bundle pathForResource:@"DataAll" ofType:@"plist"];

NSArray *array = [[NSArray alloc] initWithContentsOfFile:plistPath];
self.allData = array;
[array release];

NSDictionary *first = [[NSDictionary alloc]
        initWithDictionary:[self.allData objectAtIndex:0]];

Data *firstData = [[Data alloc] init];

[firstData setData:first];

labelName.text = [firstData EXName];
labelID.text = [NSString stringWithFormat:@"%d",[[firstData EXID]];
[firstData release];

Вот мои Data.h

@interface Data : NSObject {
    NSNumber    *EXID;
    NSString    *EXName;
}
@property (readwrite, retain) NSNumber *EXID;
@property (nonatomic, retain) NSString *EXName;

И Data.m

@implementation Data
@synthesize EXID;
@synthesize EXName;

- (void) setData: (NSDictionary *) dictionary {
   self.EXName = [dictionary objectForKey:@"Name"];
   NSNumber *ID = [dictionary objectForKey:@"ID"];
   self.EXID = ID;
}

Большое спасибо заранее!Это мой первый пост, поэтому я прошу прощения за неправильное форматирование.

Ответы [ 2 ]

1 голос
/ 26 октября 2010

Проблема в

[NSString stringWithFormat:@"%d",[[firstData EXID]];

EXID - это NSNumber* объект, а не int, поэтому% d не то, что вам нужно. Вам нужно либо заменить% d на% @, либо развернуть целое число из NSNumber, вызвав [EXID integerValue] или [EXID intValue]. Которые возвращают NSInteger и int соответственно.

0 голосов
/ 26 октября 2010

То, что ваши данные находятся в списке как целое число, не означает, что они извлекаются как единое целое. По крайней мере, когда вы получаете с [dict objectForKey:]. Кроме того, NSNumber и integer - это не один тип данных.

Полагаю, последний сбивает вас с толку. То есть неявное преобразование в NSNumber. Добавьте следующее, прежде чем звонить setData, и обновите ваш OP с помощью вывода.

NSLog(@"plist entry: %@", first);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...