所以我有两个对象。
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封装到库对象中?
调试器会给我一个休眠错误。
库copyWithZone::无法识别的选择器
发布于 2010-12-04 08:32:01
之所以调用-copyWithZone:选择器,是因为您将一个对象分配给一个标记为(copy)的属性。将其标记为( copy )将告诉编译器代表您创建一个setter,该setter尝试复制所分配的对象。
您需要将属性标记为(readwrite,retain),以便保留现有的Book实例,而不是制作副本,或者需要为Book类实现NSCopying协议。以下是苹果在NSCopying上的文档:
http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSCopying_Protocol/Reference/Reference.html%23//apple_ref/doc/uid/TP40003777
您是更改属性属性还是采用NSCopying协议,这取决于您是否真的需要复制被分配的对象(通常只有当被分配的对象是可修改的并且可能被调用者或其他人更改时才需要),还是可以只保留对现有对象的引用(被视为正常情况)。
https://stackoverflow.com/questions/4351053
复制相似问题