这是我的课
@interface BGImageBookController () <BGPageViewControllerDelegateProtocol>
@property (strong, nonatomic) IBOutlet UIPageViewController *pvc;
它包含一个名为 pvc 的属性。pvc 不是只读属性。
但是,BGImageBookController 也支持一个协议
@protocol BGPageViewControllerDelegateProtocol <NSObject>
@property (readonly,nonatomic) UIPageViewController * pvc;
-(void)reDrawEverything;
@end
在协议中,pvc 是只读属性。那是因为 PageViewControllerDelegate 不需要更改 pvc。
那么这会导致冲突。
我得到:/business/Dropbox/badgers/BadgerNew/BGImageBookController.m:30:17:自动合成时的只读 IBOutlet 属性可能无法与“nib”加载器一起正常工作
我试图通过添加来解决这个问题
@dynamic pvc;
然后我得到了这个运行时错误
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<BGImageBookController 0x1e0df340> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key pvc.'
*** First throw call stack:
(0x3120e2a3 0x38eb397f 0x3120df99 0x31a7b1d9 0x31a76f2b 0x3119461b 0x331b331d 0x331b2b9b 0x330ab03d 0x3303546d 0x14b7c9 0x14b8fd 0x14b9b1 0xc8eeb 0xc705f 0xc71a7 0x33133d89 0x330fb3f5 0x332e8a39 0x3301f82f 0x3301e293 0x330291e7 0x33028db3 0x33016801 0x3301611b 0x34d195a3 0x34d191d3 0x311e3173 0x311e3117 0x311e1f99 0x31154ebd 0x31154d49 0x34d182eb 0x3306a301 0x37299 0x37220)
libc++abi.dylib: terminate called throwing an exception
所以基本上 BGImageBookController 以两种方式支持 pvc 属性。
它有一个名为 pvc 的 IBOutlet 属性 它支持需要一个名为 pvc 的只读属性的协议。
我认为一切都应该正常工作。毕竟,拥有非只读属性也意味着支持-(UIPageViewController *) pvc;
当然,我可以只更改协议中的变量名并在我的类中重新实现它
-(UIPageViewController *) pvc1
{
return self.pvc;
}
但我认为即使不这样做,我也应该能够得到这个。毕竟类已经支持
-(UIPageViewController *) pvc
即它是一个名为 pvc 的属性,其类型是 UIPageViewController