2010-08-20 70 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