2

私は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を初めて使用するので、非常に単純なものかもしれません。

4

1 に答える 1

1

覚えておいてください

@property (strong, nonatomic) ChildObject* childObject;

@synthesize childObject = _childObject 

コンパイラは変数にメモリを与えません。あなたはそれを使用するために、またはそれらの変数を使用する必要がallocありinitます。あなたは次のようなものが必要です、childObjectsetName

_childObject = [[ChildObject alloc] init];

その後、

[_childObject setName:@"Works!!!"];
于 2012-07-18T15:11:30.653 に答える