Objective C对象不更新

时间:2012-07-18 14:58:21

标签: objective-c

我正在使用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的新手,所以它可能非常简单。

1 个答案:

答案 0 :(得分:1)

记住,做

@property (strong, nonatomic) ChildObject* childObject;

@synthesize childObject = _childObject 

编译器不会给你的变量一个内存。您必须allocinit childObject才能使用它,或setName他们的变量。你需要像

这样的东西
_childObject = [[ChildObject alloc] init];

然后,

[_childObject setName:@"Works!!!"];