我正在使用 ARC、XCode 4.2、OS X 10.6 和为 iPad 5.0 模拟器构建(每个对象都显示在表格视图单元格中)。
我有一个具有以下属性的对象的 NSArray:
// Relevant ModelClass.h
@property (strong, nonatomic) ChildObject* childObject;
@property Boolean type1;
@property Boolean type2;
// Relevant ChildObject.h
@property (strong, nonatomic) NSString* name;
我试图确保 ChildObject 的每个实例(始终是 ModelObject 的属性)都有一个名称集以供显示。我正在使用以下代码来完成此操作:
// Called after the objects are all loaded into the objects NSArray
// _data is an NSMutableArray that is allocated and initialized
// Loop through the model array and make sure that everyone has a name set
for (ModelClass *model in objects) {
NSLog(@"B %@", [[model childObject] name]);
if (model.num == 0) {
if (model.type1) {
[model.childObject setName: @"type1"];
NSLog(@"Updated Name: %@", model.childObject.name);
}
else {
model.childObject.name = @"type2";
}
}
if (! model.childObject.name) {
[model.childObject setName:@"?"];
}
[_data addObject:model];
NSLog(@"E %@", [[model childObject] name]);
}
该objects
数组有两个对象:一个有名称,一个没有(并且 type1 的布尔值设置为 true)。
但是,当代码执行时,日志如下所示:
// Log Output
2012-07-18 10:40:27.760 AppName[13462:40b] B A Really Long Name
2012-07-18 10:40:27.760 AppName[13462:40b] E A Really Long Name
2012-07-18 10:40:27.760 AppName[13462:40b] B (null)
2012-07-18 10:40:27.761 AppName[13462:40b] Updated Name: (null)
2012-07-18 10:40:27.761 AppName[13462:40b] E (null)
前三行是正确的(第一个对象的名称未更改,第二个对象的名称设置为null
)。由于某种原因,第二个对象的名称没有更新,即使看起来代码正在执行以更改其名称。
为什么对象的名称不更新?我是 Objective-C 的新手,所以它可能非常简单。