iphone - objective-c : setting an object attribute ; attribute not updating

标签 iphone objective-c ios xcode ipad

哇。今天早上我完全精神崩溃了这个 101 问题。

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

- (void)showFullProposal:(id) sender {

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

}

变量声明如下:

View Controller :

@interface ViewController()

@property (nonatomic, strong) NSMutableArray* proposalInfoArray;

@end

提案信息.h:

@interface ProposalInfo : NSObject

@property (assign) BOOL expanded;

@end

提案信息.m:

@synthesize expanded;

请帮忙!!

最佳答案

如果您从不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!

关于iphone - objective-c : setting an object attribute ; attribute not updating,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541155/

相关文章:

iphone - 如何告诉 MPNowPlayingInfoCenter 音乐是在播放还是暂停?

iphone - 两个数组在一个第一个数组中检索两个值

iphone - 如何检查 iOS 4.2 之前的特定应用程序是否启用了位置服务?

objective-c - 当 int 在另一个循环中递增时如何管理它?

ios - NavigationController 的底栏

html - iPhone(Safari 和 Chrome 两者)位置 : fixed bug?

ios - 计算适合矩形的最大字体大小?

ios - 奇怪的底层灰色轮廓 View 试图以编程方式解雇 UISplitViewController 的主人

ios - 将 XCode 输出写入文件

iOS:使按钮不可点击,除非在编辑模式下。但是 enable=false 不是我要找的