【问题标题】:iOS designated initializer issues during assignmentiOS 指定初始化程序在赋值期间的问题
【发布时间】: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 或一些失败的类?

标签: ios iphone exception


【解决方案1】:

解决了。

对于其他有初始化问题的人,请仔细检查 [super init] 将要做什么。就我而言,我有另一个被调用的初始化程序,因此它把事情搞砸了。另一个初始化程序调用 [self setup] 没有分配值,因此崩溃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多