2010-08-20 50 views
0

我有以下代碼:屬性錯誤的目標C

在.H:

interface .... { 
    int CatID; 
    ... 
} 
@property (readwrite) int CatID; 

.m: 
// Already includes the header file (.h) 
implementation ... { 
    @synthesize CatID; 
.... 
    - (void)setCatIDa:(int)cid { 
     self.CatID = 20; 

     NSLog(@"cat id: %d", CatID); // this returns 20 
    } 

    - (IBAction)someTest:(id)sender { 
     NSLog(@"cat id: %d", CatID); // returns 0 
    } 

} 

如何找上門返回0?

而且筆尖意見設定之間變化,並得到

+0

你最好發佈你調用setter/getter的代碼。 你爲什麼要做另一個二傳手並用另一個名字叫它? – rano 2010-08-20 12:15:33

+0

setCatIa只是爲了解釋問題和self.CatID設置int對嗎? – Daniel 2010-08-20 12:30:45

+0

你是指「//在另一個...」中的含義? – andyvn22 2010-08-20 13:14:34

回答

0

沒有完整的代碼,我看不出什麼會導致這種行爲,但我想指出幾個事情可以得到改善而可能會對產生影響。

  • 該屬性定義不包括(分配) - 它可能是默認的,但我會包括它以防萬一。所以@屬性(分配,讀寫)NSInteger catId;
  • iVar的名字以大寫字母開頭 - 它是一個實例,所以應該使用小寫字母。 @synthesize catId;
  • 當引用它,使用self.catId

如果你能發佈完成接口和實現它會是更容易測試。我寫了一些非常相似的東西,它工作正常...

+1

assign是默認值。他的財產聲明是確定的。使用int作爲屬性類型也沒有問題。 – JeremyP 2010-08-20 14:19:57

+0

感謝您澄清分配jeremy。哦,我不是故意暗示int *是錯誤的 - 我在重寫時根本沒有注意到它。 – dannywartnaby 2010-08-20 16:00:03

+0

我的錢在它上面需要'self.CatID'才能正常工作。我也同意財產應該從小寫開始,但我認爲現在不是這個問題。 – theMikeSwan 2010-08-20 23:00:22