gpt4 book ai didi

ios - NSMutableArray removeObject 崩溃

转载 作者:行者123 更新时间:2023-11-28 18:19:17 25 4
gpt4 key购买 nike

不好意思我是iOS开发的新手,今天遇到了一个奇怪的问题:当我从自定义对象中删除对象时,它总是返回崩溃:

原因:'-[__NSArrayI removeLastObject]:发送到实例的无法识别的选择器

以下代码:

@interface Base : NSObject

@property (nonatomic, assign) BOOL isFinish;
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *subTitle;
@property (nonatomic, strong) NSString *tagURL;
@property (nonatomic, assign) NSInteger taskScore;
@property (nonatomic, assign) BOOL inProgress;
@property (nonatomic, assign) NSInteger nowTime;
@property (nonatomic, assign) NSInteger totalTime;

@end

然后我在另一个类上使用:

@property (nonatomic, strong) NSMutableArray *arr1;
@property (nonatomic, copy) NSMutableArray *arr2;

_arr1 = [[NSMutableArray alloc] init];
for (int i = 0; i < 10; i++) {
Base *b = [[Base alloc] init];
b.title = [[NSString alloc] initWithFormat:@"%d", i];
[_arr1 addObject:b];
}
self.arr2 = [_arr1 copy];// 001, I tried copy or mutable copy

[_arr2 removeLastObject]; //it always crash in here!!

所以我查看了一些引用资料,有些人告诉我必须符合 nscopyingnsmutablecopying 协议(protocol)

所以我在基类@implementation中添加了一些方法

- (id)copyWithZone:(struct _NSZone *)zone
{
Base *copy = [[[self class] allocWithZone:zone] init];
if (copy) {
[copy setIsFinish:[self isFinished]];
[copy setTitle:[self title]];
[copy setSubTitle:[self subTitle]];
[copy setTagURL:[self tagURL]];
[copy setTaskScore:[self taskScore]];
[copy setInProgress:[self inProgress]];
[copy setNowTime:[self nowTime]];
[copy setTotalTime:[self totalTime]];
}
return copy;

}

但是它不起作用,有人可以帮助我吗?

最佳答案

首先看看你得到的错误。它非常清楚地表明您将“removeObject”发送到一个不理解它的 NSArray,而不是一个 NSMutableArray。合乎逻辑的结论是,此时 _arr2 不是一个可变数组,而是一个 NSArray。

现在作为一名软件开发人员,您应该尝试从逻辑上思考这个问题。你知道 copy 和 mutableCopy 的区别吧?你说你使用了 mutableCopy,但是你认为当你设置一个标记为“复制”的属性时会发生什么?它复制。通过调用副本。因此,您制作了可变 nsarray 的可变副本,而属性 setter 制作了不可变副本。

关于ios - NSMutableArray removeObject 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23655426/

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