Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 正在调用copyWithZone_Objective C_Class_Ios_Sdk - Fatal编程技术网

Objective c 正在调用copyWithZone

Objective c 正在调用copyWithZone,objective-c,class,ios,sdk,Objective C,Class,Ios,Sdk,我有两个物体 Library.h: NSString *name; Book *book; Book.h: NSString *title NSString *author; 属性都设置为(读写、复制) 如何将书封装在library对象中 调试器给了我一个衰减错误 [library copyWithZone:]:无法识别的选择器正在调用-copyWithZone:选择器,因为您正在将对象分配给标记为(复制)的属性。将其标记为(copy)会告诉编译器代表您创建一个set

我有两个物体

Library.h:
   NSString *name;
   Book *book;

Book.h:
   NSString *title
   NSString *author;
属性都设置为(读写、复制)

如何将书封装在library对象中

调试器给了我一个衰减错误


[library copyWithZone:]:无法识别的选择器

正在调用-copyWithZone:选择器,因为您正在将对象分配给标记为(复制)的属性。将其标记为(copy)会告诉编译器代表您创建一个setter,该setter尝试创建所分配对象的副本

您需要将属性标记为(readwrite,retain),以便保留现有的Book实例,而不是制作副本,或者需要为Book类实现NSCopying协议。以下是苹果关于NSCopying的文档:

您是更改属性属性还是采用NSCopying协议取决于您是否确实需要复制所分配的对象(通常仅当所分配的对象可修改且可能由调用者或其他人更改时才需要),还是仅保留对现有对象的引用即可(视为正常情况)

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;