【发布时间】:2013-11-21 08:22:59
【问题描述】:
我在头文件中定义了三个属性,如下所示:
@property (nonatomic,strong) NSNumber *forCount;
@property (nonatomic,strong) NSNumber *againstCount;
@property (nonatomic,strong) NSNumber *neutralCount;
在我的 .m 文件中,我使用以下方法进行合成:
@synthesize forCount = _forCount;
@synthesize againstCount = _againstCount;
@synthesize neutralCount = _neutralCount;
我指定的初始化器定义为:
- (id)initWithCounts:(NSNumber *)forInitCount
againstCount:(NSNumber *)againstInitCount
neutralCount:(NSNumber *)neutralInitCount
{
NSLog(@"entering chartView initialization");
NSLog(@"chartView initialization. data being sent: forCount:%@, againstCount:%@, neutralCount: %@",forInitCount,againstInitCount,neutralInitCount);
if (self = [super init]) {
[self setForCount:forInitCount];
[self setAgainstCount:againstInitCount];
[self setNeutralCount:neutralInitCount];
}
NSLog(@"chartView initialization. forCount:%@, againstCount:%@, neutralCount: %@",self.forCount,self.againstCount,self.neutralCount);
[self setup];
return self;
}
我正在设置视图中绘制图表。
对属性的分配似乎不起作用。这是我的日志的样子:
2013-11-21 03:13:20.897 testProj[4744:70b] entering chartView initialization
2013-11-21 03:13:20.897 testProj[4744:70b] chartView initialization. data being sent: forCount:10, againstCount:1, neutralCount: 5
2013-11-21 03:13:20.931 testProj[4744:70b] ChartView forCount: (null), againstCount: (null), neutralCount: (null)
2013-11-21 03:13:20.933 testProj[4744:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]'
知道为什么属性仍然保留为(null)吗?
注释掉 [self setup] 方法也会导致相同的(null) 分配。 - 因此,我可以排除设置方法起作用。
我这样调用方法:
NSLog(@"chartViewAtIndex about to be called. forCount:%@, againstCount:%@ and neutralCount:%@",self.forVotes[index],self.againstVotes[index],self.neutralVotes[index]);
ChartView *chartView = [[ChartView alloc]initWithCounts:self.forVotes[index] againstCount:self.againstVotes[index] neutralCount:self.neutralVotes[index]];
日志显示:
2013-11-21 09:43:46.551 testProj[5284:70b] chartViewAtIndex about to be called. forCount:10, againstCount:1 and neutralCount:5
赋值后的 break 语句,就在 NSLog 行显示赋值正确之前:
_forCount __NSCFNumber * (int)10 0xb0000000000000a2
_againstCount __NSCFNumber * (int)1 0xb000000000000012
_neutralCount __NSCFNumber * (int)5 0xb000000000000052
【问题讨论】:
-
你能添加
setup方法的代码吗?还有调用方法initWithCounts:againstCount:neutralCount:?的代码 -
有件事你没有告诉我们,我复制了你的代码,它可以工作,告诉我们调用方法,你的自定义对象的分配
-
调试这 3 个
[self setForCount:forInitCount]; [self setAgainstCount:againstInitCount]; [self setNeutralCount:neutralInitCount];并查看其中发生了什么。写回日志。他们是否设置了forCount, againstCount, neutralCount的值? -
在这里工作正常。只需通过将 3 个值发送为 [NSNumber numberWithInt:] 来调用该方法
-
什么是超级? NSObject 或一些失败的类?