首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >被调用的copyWithZone

被调用的copyWithZone
EN

Stack Overflow用户
提问于 2010-12-04 08:07:33
回答 1查看 3.4K关注 0票数 2

所以我有两个对象。

代码语言:javascript
复制
Library.h:
   NSString *name;
   Book *book;

Book.h:
   NSString *title
   NSString *author;

属性都设置为(readwrite,copy)

代码语言:javascript
复制
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::无法识别的选择器

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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协议,这取决于您是否真的需要复制被分配的对象(通常只有当被分配的对象是可修改的并且可能被调用者或其他人更改时才需要),还是可以只保留对现有对象的引用(被视为正常情况)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4351053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档