gpt4 book ai didi

objective-c - copyWithZone 被调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:19:36 25 4
gpt4 key购买 nike

所以我有 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:]: 无法识别的选择器

最佳答案

调用 -copyWithZone: 选择器是因为您将对象分配给标记为(复制)的属性。将其标记为 (copy) 告诉编译器代表您创建一个 setter,它试图复制被分配的对象。

您要么需要将您的属性标记为(读写,保留),以便保留 Book 的现有实例而不是制作副本,要么您需要为您的 Book 类实现 NSCopying 协议(protocol)。这是 Apple 关于 NSCopying 的文档:

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSCopying_Protocol/Reference/Reference.html%23//apple_ref/doc/uid/TP40003777

是改变属性属性还是采用NSCopying协议(protocol)取决于你是否真的需要复制被赋值的对象(通常只有当被赋值的对象是可修改的并且可能被调用者或其他人改变时才需要),或者可以只保留对现有对象的引用(被认为是正常情况)。

关于objective-c - copyWithZone 被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4351053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com