gpt4 book ai didi

ios - 管理数组 - 发送到不可变对象(immutable对象)的变异方法

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

我尝试用其他数组填充现有数组:

if (!self.photos){
self.photos = [responseDictionary valueForKeyPath:@"data"];
} else {
NSArray *newPhotosFromFeed = [responseDictionary valueForKeyPath:@"data"];
[self.photos addObjectsFromArray:newPhotosFromFeed];
}

编译器给我一个错误 - mutating method sent to immutable object .

像这样声明的照片:
@property (nonatomic) NSMutableArray *photos;

方法声明(来自 Apple.developer)如下:
- (void)addObjectsFromArray:(NSArray *)otherArray

那么,我是如何违反规则的呢?

我加 不可变 数组 NSArray *newPhotosFromFeed可变 数组 self.photos .

那么为什么我会收到这个错误?

最佳答案

如果首先调用此行:

self.photos = [responseDictionary valueForKeyPath:@"data"];

那么您将在可变属性中存储一个不可变数组。编译器无法判断它是错误的,并且运行时不会检查,所以你不知道它正在发生。然后,稍后,当您调用时:
[self.photos addObjectsFromArray:newPhotosFromFeed];

你得到了崩溃。

因此,您应始终确保将对象设置为 photos是可变的,最简单的方法是使用 mutableCopy因为这将适用于可变和不可变的源对象:
self.photos = [[responseDictionary valueForKeyPath:@"data"] mutableCopy];

关于ios - 管理数组 - 发送到不可变对象(immutable对象)的变异方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28914975/

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