所以我有2个物体。
Library.h:
NSString *name;
Book *book;
Book.h:
NSString *title
NSString *author;
属性都设置为(readwrite,copy)
ViewController.h:
Library *library;
Book *book;
ViewController.m:
library = [[Library alloc] init];
book = [[Book alloc]init];
//The fallowing all works
library.name = @"Library Name";
book.title = @"book Title";
book.author = @"book author";
//The fallowing crashes my app
library.book = book;
如何将Book封装在库对象中?
调试器给了我一个错误的错误。
[library copyWithZone:]:无法识别的选择器
答案 0 :(得分:3)
正在调用-copyWithZone:选择器,因为您正在将对象分配给标记为(copy)的属性。将其标记为(复制)会告诉编译器代表您创建一个setter,它会尝试复制正在分配的对象。
您需要将属性标记为(readwrite,retain),以便保留Book的现有实例而不是制作副本,或者需要为Book类实现NSCopying协议。这是Apple关于NSCopying的文档:
是否更改属性属性或采用NSCopying协议取决于您是否确实需要复制所分配的对象(通常仅在被分配的对象可修改且可由调用者或其他人更改时才需要),或者只需保留对现有对象的引用(被认为是正常情况)就可以逃脱。