Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 目标c:设置对象属性;属性未更新_Iphone_Objective C_Ios_Xcode_Ipad - Fatal编程技术网

Iphone 目标c:设置对象属性;属性未更新

Iphone 目标c:设置对象属性;属性未更新,iphone,objective-c,ios,xcode,ipad,Iphone,Objective C,Ios,Xcode,Ipad,哇。今天早上,我在这个101问题上完全精神失常了 在ViewController中,我有这个代码。但是在它执行之后,[proposalInfo expanded]的值仍然是NO。有人能看出我做错了什么吗 - (void)showFullProposal:(id) sender { // update proposalinfo ProposalInfo *proposalInfo = [self.proposalInfoArray objectAtIndex:index.section]; [p

哇。今天早上,我在这个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
ProposalInfo.m:

@synthesize expanded;

请帮忙

Imme,下面这行似乎很奇怪:

ProposalInfo *proposalInfo = [self.proposalInfoArray objectAtIndex:index.section];
实际上,你的数组中有什么,在
proposalinforary
中是什么意思。
你检查过你的物品了吗?

伊米,下面这行看起来很奇怪:

ProposalInfo *proposalInfo = [self.proposalInfoArray objectAtIndex:index.section];
实际上,你的数组中有什么,在
proposalinforary
中是什么意思。
你检查过你的对象吗?

如果你从来没有
alloc
/
init
你的
proposalInfoArray
数组,你可能会经历这样的行为(即没有错误,但总是得到
no
返回,因为当你向
nil
对象发送消息时,你会得到
nil
返回)。如果不是这样的话,那就简单点。检查
ProposalinforArray
,确保它不是
nil
。还要检查您返回的
proposalInfo
对象,确保它不是
nil

为了说明您可能遇到的问题,这将再现您描述的行为(例如,
expanded
看起来像是
NO
,但您仍然没有得到任何异常):

鉴于此项工作正常:

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

。如果不是这样的话,那就简单点。检查
ProposalinforArray
,确保它不是
nil
。还要检查您返回的
proposalInfo
对象,确保它不是
nil

为了说明您可能遇到的问题,这将再现您描述的行为(例如,
expanded
看起来像是
NO
,但您仍然没有得到任何异常):

鉴于此项工作正常:

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

proposalinfo中的
setExpanded:
方法如何?@I'MPOSSIBLE将合成
setExpanded:
方法。@I'MPOSSIBLE由于属性已合成,因此不需要显式的setExpanded方法。proposalinfo中的
setExpanded:
方法如何?@I'MPOSSIBLE
setExpanded:
方法已合成。@我不可能,因为属性已合成,所以不需要显式的setExpanded方法。我怀疑您关于
ProposalinforArray
的说法是正确的,但我不确定您觉得这行代码有什么奇怪之处。我假设Imme有一个tableview,每个提案有一个部分,并且可能试图跟踪该部分是否被扩展。Rob,实际上我感到奇怪的是Imme试图用这个来辅助他的“proposalInfo”对象,重点是数组是否有这样的对象,如果是,那么它是保留还是不保留。更重要的是,可能根据我的想法,这个物体正在制造那个问题;一旦imme向我大喊这个对象,那么只有我才能思考其他方面,因为几秒钟前我尝试在我的示例代码中使用它,它提供了imme想要的。这个构造绝对没有问题。这是一种非常常见的模式,设置一些局部指针变量以指向数组中的对象。当然,在该循环的作用域中,对象有一个额外的强引用,但只要
proposalInfo
指针超出作用域或设置为其他对象,它就会被解析。唯一有点危险的是缺少
iskind
逻辑(但如果他得到了错误类型的对象,就会引发异常,所以这不是问题),但这种总体模式一点也不奇怪。感谢您在这方面的投入。我怀疑您对
proposalInfoArray
的看法是正确的,但我不确定你觉得这行代码有什么奇怪之处。我假设Imme有一个tableview,每个提案有一个部分,并且可能试图跟踪该部分是否被扩展。Rob,实际上我感到奇怪的是Imme试图用这个来辅助他的“proposalInfo”对象,重点是数组是否有这样的对象,如果是,那么它是保留还是不保留。更重要的是,可能根据我的想法,这个物体正在制造那个问题;一旦我对这个物体大喊大叫,那么只有我能想到其他方面,因为几秒钟前我试着用这个