0

哇。今天早上我在这个 101 问题上完全精神失常。

ViewController,我有这个代码。但是在它执行之后,它的值[proposalInfo expanded]仍然是NO。有人可以看到我做错了什么吗?

- (void)showFullProposal:(id) sender {

// update proposalinfo
ProposalInfo *proposalInfo = [self.proposalInfoArray objectAtIndex:index.section];
[proposalInfo setExpanded:YES];

}

变量声明如下:

视图控制器:

@interface ViewController()

@property (nonatomic, strong) NSMutableArray* proposalInfoArray;

@end

提案信息.h:

@interface ProposalInfo : NSObject

@property (assign) BOOL expanded;

@end

提案信息.m:

@synthesize expanded;

请帮忙!!

4

2 回答 2

3

如果您从未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请随意使用!

于 2012-11-24T12:48:39.777 回答
2

Imme,以下行似乎很奇怪:

ProposalInfo *proposalInfo = [self.proposalInfoArray objectAtIndex:index.section];

实际上,你的数组中有什么,意味着在proposalInfoArray. 你检查过你的对象吗?

于 2012-11-24T12:37:51.387 回答