0
self.strID=nil;

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

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

@property (nonatomic) NSString * strID;

问题是它也通过协议公开声明为只读。基本上,我正在用私有财产实现该公共财产。

我的方法有什么问题?

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

这是一个运行时错误。不是编译错误。顺便说一句,代码编译得很好。

4

1 回答 1

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;
}
于 2013-05-01T12:25:46.077 回答