Objective c 目标C中的属性错误

Objective c 目标C中的属性错误,objective-c,Objective 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; NSLo

我有以下代码:

在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


此外,如果没有完整的代码,NIB视图在set和get之间也会发生变化。我看不出到底是什么导致了这种行为,但我想指出一些可以改进的地方,可能会产生影响

  • 属性定义不包含(assign)-它可能是默认的,但我会包含它以防万一。So@property(assign,readwrite)NSInteger catId
  • iVar的名称以大写字符开头-它是一个实例,所以应该使用小写@合成catId
  • 引用时,请使用self.catId

如果您可以发布完成的接口和实现,那么测试就更容易了。我在这里写了一些非常类似的东西,效果很好…

您最好发布调用setter/getter的代码。为什么要使用另一个setter并用另一个名称调用它?setCatIa只是为了解释问题,self.CatID将int设置为正确的值?在另一个…”中的“/”是什么意思?之后是另一个方法。您确定在同一实例上的
-setCatIDa:
之前调用了
-someTest:
?您也可以尝试记录实例。默认情况下为assign。他的财产申报没有问题。使用int作为属性类型也没有什么错。感谢您澄清这个问题。哦,我并不是想说int是错的——我只是在重新编写时没有太注意它。我的钱花在它上面,需要
self.CatID
才能正常工作。我也同意属性应该以小写开头,但我认为现在不是问题所在。@theMike:在类
CatID
中,您只需直接使用ivar而不是生成的setter/getter即可。@George那么,为什么我在尝试直接从类中的with访问属性时遇到问题?几乎一直都在发生。