我有一个很好的算法,直到我决定将局部变量变成一个类对象。代码是:
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.
答案 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)
在.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方法中。
这有意义吗?