如果您从未alloc
/init
您的proposalInfoArray
数组,您可能会遇到这样的行为(即不会出错,但总是会NO
返回,因为当您向对象发送消息时nil
,您会nil
返回)。如果不完全是这样,那将是这样简单的事情。检查proposalInfoArray
并确保它不是nil
. 还要检查proposalInfo
你回来的对象,确保它不是nil
.
为了说明您可能遇到的问题,这会重现您描述的行为(例如,expanded
看起来它是NO
,无论如何,但您仍然没有得到任何异常):
self.proposalInfoArray = nil; // This obviously won't work
[self.proposalInfoArray addObject:[[ProposalInfo alloc] init]];
ProposalInfo *proposalInfo = [self.proposalInfoArray objectAtIndex:0];
NSLog(@"before=%d", proposalInfo.expanded); // OK, IT'S "0"
proposalInfo.expanded = YES;
NSLog(@"after=%d", proposalInfo.expanded); // HEY, IT'S STILL "0" -- BAD!
而这工作正常:
self.proposalInfoArray = [[NSMutableArray alloc] init];
[self.proposalInfoArray addObject:[[ProposalInfo alloc] init]];
ProposalInfo * proposalInfo = [self.proposalInfoArray objectAtIndex:0];
NSLog(@"before=%d", proposalInfo.expanded); // OK, IT'S "0"
proposalInfo.expanded = YES;
NSLog(@"after=%d", proposalInfo.expanded); // HEY, IT'S NOW "1" -- GOOD!
就未来如何识别这些问题而言,使用NSAssert
. 如果我们在该行之前有以下代码行,我们就会发现这个问题objectAtIndex
:
NSAssert(self.proposalInfoArray, @"proposalInfoArray must be initialized!");
或者,在objectForIndex
:
NSAssert(proposalInfo, @"proposalInfo must not be nil!");
语句的NSAssert
好处是你可以把它们放在你的代码中,当你为调试而构建时,它们可以帮助你发现你的程序逻辑错误,但是当你构建你的最终发布版本时,它们会被自动省略,使你的代码更加高效的。所以,NSAssert
请随意使用!