为什么我不能做self.strID = nil;?

时间:2013-05-01 04:20:00

标签: objective-c properties

self.strID=nil;

它弹出错误说: 原因:' - [BGFacebookHandler setStrID:]:无法识别的选择器发送到实例0x20525240' * 第一次抛出调用堆栈:

但是,我将该属性声明为私有读写:

@property (nonatomic) NSString * strID;

这个问题也被宣布为通过协议公开阅读。基本上我是用私人财产来实施公共财产。

我的方法出了什么问题?

显然我可以做@synthesize,但这样做意味着使用过时版本的objective-c

这是运行时错误。不是编译错误。顺便编译代码就好了。

1 个答案:

答案 0 :(得分:0)

将实现属性声明为接口的一部分或私有扩展在运行时不会更改任何内容。我必须在代码中缺少其他东西,因为我有以下代码片段可以正常工作:

@protocol Facebook<NSObject>
- (NSString*) strID;
@end

@interface BGFacebookHandler : NSObject<Facebook>
@property (retain) NSString * strID;
@end

@implementation BGFacebookHandler
@end

int main (int argc, const char * argv[])
{
    @autoreleasepool {

        BGFacebookHandler *object = [[BGFacebookHandler alloc] init];
        object.strID = @"Hello";
        NSLog(@"strID = %@",object.strID);
    }
    return 0;
}