2012-07-18 75 views
2

我正在使用ARC,XCode 4.2,OS X 10.6和iPad 5.0模擬器(每個對象都顯示在表格視圖單元格中)。Objective C Object Not Updating


我有一個具有以下屬性的對象一個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的新手,所以它可能非常簡單。

+0

我們可以看到你的 「的setName」 的方法吧。您可能會錯誤地發送消息。 – MrHappyAsthma 2012-07-18 15:01:55

+2

我會懷疑'model.childObject'爲你的第二個'model'爲null。你能記錄它來驗證嗎? – 2012-07-18 15:03:22

+0

@MrHappyAsthma - 吸引者/吸氣者合成 – keyboarddrummer 2012-07-18 15:09:31

回答

1

記住,做

@property (strong, nonatomic) ChildObject* childObject; 

@synthesize childObject = _childObject 

編譯器不會給您的變量的存儲。您必須使用allocinit您的childObject才能使用它,或者使用setName變量。你需要這樣的東西,

_childObject = [[ChildObject alloc] init]; 

然後,

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

謝謝 - 這解決了問題。 – keyboarddrummer 2012-07-18 15:18:00

+0

很高興幫助! – doNotCheckMyBlog 2012-07-18 15:19:35