copyWithZone被称为
问题描述:
所以我有2个对象。copyWithZone被称为
Library.h:
NSString *name;
Book *book;
Book.h:
NSString *title
NSString *author;
的属性都设置为(读写,拷贝)
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;
我怎样才能封装图书库对象的内部?
调试器给我一个下面的错误。
[库copyWithZone:]:无法识别选择
答
的-copyWithZone:选择被调用,因为你分配一个对象被标记为(副本)的属性。将它标记为(复制)会告诉编译器以您的名义创建一个设置器,以尝试复制分配的对象。
您或者需要将您的属性标记为(readwrite,retain),以便保留Book的现有实例而不是制作副本,或者需要为Book类实现NSCopying协议。下面是苹果的NSCopying文档:
不管是更改属性的属性或采用NSCopying协议取决于你是否真的需要拷贝被分配的对象(通常只需要被分配对象时会被修改和可能会被调用者或其他人改变),或者只是保留对现有对象的引用(被认为是正常情况)就可以逃脱。
这表示感谢。 – endy 2010-12-04 00:59:17