NSNumber как сохраненный объект в NSDictionary - PullRequest
0 голосов
/ 02 июня 2011

У меня есть алгоритм, который работал нормально, пока я не решил превратить локальную переменную в объект класса. Код:

NSArray*parseLine=[newline componentsSeparatedByString:@","];
float percentx=[[parseLine objectAtIndex:1] floatValue];

//this NSLog prints fine and shows good values for all three items
NSLog(@"parsline:%@ and %@ and percentx: %f",[parseLine objectAtIndex:0], [parseLine objectAtIndex:1], percentx);

[self.data setObject:[NSNumber numberWithFloat:percentx] forKey:[parseLine objectAtIndex:0]];

//this NSLog shows (null) for the  [self.data objectForKey:]
NSLog(@"%@ %f %@", [parseLine objectAtIndex:0] ,percentx, [self.data objectForKey:[parseLine objectAtIndex:0]]);

Я сбит с толку, как [self.data objectForKey:key] может быть нулевым, когда оператор setObject для этого объекта NSMutableDictionary с именем "data" использует допустимые элементы. Возможно, проблема NSNumber, но все это работало нормально, когда «данные» были просто локально размещаемым / инициализируемым объектом.

На самом деле, «данные» вообще не отправляют данные. Позже я могу сделать это:

 NSLog(@"%i",[data count]);

И возвращает 0.

Ответы [ 3 ]

1 голос
/ 02 июня 2011

Вам необходимо создать словарь и присвоить ему self.data, прежде чем использовать self.data, например, во время инициализатора вашего класса (предполагается, что -init для этого примера):

- (id)init
{
    self = [super init];
    if (!self) return self;

    data = [[NSMutableDictionary alloc] init];
    return self;
}

Почти все сообщения nil возвращают 0 / NO / false / NULL / nil / Nil.(Некоторые сообщения имеют неопределенный эффект при отправке в класс nil object / Nil.) Вот как вы можете получить счетчик 0 и объект nil для своего ключа: у вас есть словарь nil.

1 голос
/ 02 июня 2011

Помечены ли данные как сохраненные в вашем заголовке?self.data не обязательно эквивалентен самим данным, поскольку self.data является свойством данных ivar.

Возможно, опубликуйте, как вы инициализируете self.data?

0 голосов
/ 03 июня 2011

хорошо, я вижу проблему, вы не совсем понимаете, как работают ivars и свойства. ПОПРОБУЙТЕ ЭТО:

В вашем .h файле ...

@interface YourClassName
    NSMutableDictionary *data;
@end

@property(nonatomic, retain) NSMutableDictionary *data;

В вашем .m файле ...

@implementation YourClassName

@synthesize data

- (id) initWithFrame:(CGRect) frame {
    // Other init code here
    self.data = [NSMutableDictionary dictionary];  
}

Теперь вы можете ссылаться на self.data везде в вашем классе.

не забудьте [выпуск данных]; в методе dealloc.

Имеет ли это смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...