NSNumber作为NSDictionary中的存储对象

时间:2011-06-02 18:25:56

标签: objective-c

我有一个很好的算法,直到我决定将局部变量变成一个类对象。代码是:

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]]);

当这个名为“data”的[self.data objectForKey:key]对象的setObject语句使用有效项时,我感到困惑NSMutableDictionary如何为null。 NSNumber可能是问题所在,但当“data”只是一个本地alloc / init对象时,所有这些都能正常工作。

实际上,“数据”根本不是发送数据。后来我可以这样做:

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

它返回0.

3 个答案:

答案 0 :(得分:1)

数据是否在标题中标记为保留? self.data本身不一定等同于数据,因为self.data是ivar数据的属性。

也许发布你如何初始化self.data?

答案 1 :(得分:1)

在使用self.data之前,您需要创建一个字典并将其分配给self.data,例如,在您的课程指定的初始值设定项中(假设此示例为-init):< / p>

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

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

几乎所有发往nil的消息都返回0 / NO / false / NULL / nil / Nil。 (某些消息在发送到nil对象/ Nil类时具有未定义的效果。)这是您为密钥获取0计数和nil对象的方法:您有{ {1}}字典。

答案 2 :(得分:0)

好吧,我看到了问题,你对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方法中。

这有意义吗?