Bre*_*den 1 warnings compiler-errors objective-c ios
我正在使用xcode 4.5.2和LLVM 4.1.我期待我不需要合成一个类属性也不需要声明一个实例变量,但我收到的错误表明这些期望是错误的.
我的课:
@interface Test : NSManagedObject
@property (strong, nonatomic) NSString *string;
@property (strong, nonatomic) NSString *number;
@end
@implementation Test
- (NSString*)string {
return _string;
}
@end
Run Code Online (Sandbox Code Playgroud)
1)使用未声明的标识符'string'
我还在WWDC 2010 Session 144中看到了以下内容:
return self->string;
Run Code Online (Sandbox Code Playgroud)
但是这给出了一个错误,建议使用点符号.
2)在'Test*'类型的对象上找到属性'string'; 你的意思是用"."来访问它.运营商?
我也收到警告number
:
3)属性'number'需要定义方法'number' - 使用@synthesize,@ dynamic或在这个类实现中提供方法实现
我完全迷失了这里发生的事情.它开始煮沸我的血液一点点.我错过了什么?
首先,点符号是你的朋友!
其次,当你尝试使用时,->
你必须访问ivar.在最新版本的Xcode和LLVM中,如果您未指定自己使用的ivar,则会为您创建带有下划线的ivar @synthesize
.
所以你会这样做self->_string
.您在使用.
建议时访问该属性.这也可能是你收到警告的原因number
,因为self->number
不存在.
编辑:回应你正在使用的事实NSManagedObject
我肯定建议使用属性(如托德推荐).NSManagedObjects希望你使用@dynamic
,因为Core Data会在很多方面做很多事情,Apple建议你不要改变它.
如果你想要一个自定义的getter/setter,我会推迟使用这些方法的另一个SO问题primitive
:
- (NSString *)name
{
[self willAccessValueForKey:@"name"];
NSString *myName = [self primitiveName];
[self didAccessValueForKey:@"name"];
return myName;
}
Run Code Online (Sandbox Code Playgroud)
当然,Apple Docs就此事.以及与 iOS 6 相关的相关问题/解决方案.
归档时间: |
|
查看次数: |
1492 次 |
最近记录: |