私は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]);
}
配列には2つのobjects
オブジェクトがあります。1つは名前付き、もう1つは名前なし(および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)
最初の3行は正しいです(最初のオブジェクトの名前は変更されておらず、名前がに設定されている2番目のオブジェクトnull
)。何らかの理由で、コードが名前を変更するために実行されているように見えても、2番目のオブジェクトの名前は更新されません。
オブジェクトの名前が更新されないのはなぜですか?私はObjective-Cを初めて使用するので、非常に単純なものかもしれません。