gpt4 book ai didi

ios - 为什么我在尝试将对象添加到 NSMutableArray 时会收到 SIGABRT

转载 作者:行者123 更新时间:2023-12-01 19:01:58 25 4
gpt4 key购买 nike

我有两个类 - BNRItem 和 BNRContainer。 BNRContainer 是 BNRItem 的子类。为了减少我粘贴的代码量,假设以下我已经测试并且知道有效:

+(BNRItem * ) randomItem; // allocate and init a random item.

@property(nonatomic, readwrite, copy) NSMutableArray * subitems; // This is a property of BNRContainer class

main.m:

NSMutableArray * rand_items = [NSMutableArray alloc] init];
for (int i = 0; i < 10; i++) {
[rand_items addObject: [BNRItem randomItem]];
}

[rand_items addObject: @"HELLO"];

BNRContainer * rand_container_of_items = [BNRContainer randomItem];
rand_container_of_items.subitems = rand_items;

[rand_container_of_items.subitems addObject: @"THERE"]; // ERROR SIGABRT

NSLog(@"------------------------------------------------------");
NSLog(@"%@", rand_container_of_items);

rand_container_of_items = nil;

如果我 NSLog如果不添加@“THERE”,我会在描述中看到“HELLO”,所以我知道我可以调用 addObject:在那时候。当我尝试访问 rand_container_of_items 的 ivar“子项”时,为什么会收到 SIGABRT?我就是想不通这个。

最佳答案

问题似乎是 复制 声明中的修饰符。

@property (nonatomic, readwrite, copy) NSMutableArray *subitems;

documentation ,NSCopying 协议(protocol)的一致性是继承自 NSArray,所以我怀疑是在这一行
rand_container_of_items.subitems = rand_items;
subitems包含原始数组的不可变副本。尝试删除 复制 从你的声明中。如果您需要副本,请使用 mutableCopy方法。

关于ios - 为什么我在尝试将对象添加到 NSMutableArray 时会收到 SIGABRT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22189698/

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