gpt4 book ai didi

iphone - 如何删除属于另一个对象一部分的 NSMutableArray 上的所有对象?

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

我有一个如下定义的对象:分数.h:

@interface Scores : NSObject {
NSString *sentenceKey;
NSMutableArray *scorrectAnswers;
}
@property (nonatomic, copy) NSString *sentenceKey;
@property (nonatomic, copy) NSMutableArray *scorrectAnswers;
+ (id)addScore:(NSString *)senKey;

- (id)initWithSentenceKey:(NSString *)sKey
scorrectAnswers:(NSMutableArray *)scorrectAs;

- (id)initWithSentenceKey:(NSString *)sKey;
- (void)removeArrayObjects;

分数.m:

#import "Scores.h"
@implementation Scores

@synthesize sentenceKey, scorrectAnswers;

+ (id)addScore:(NSString *)senKey
{
Scores *newScore = [[self alloc] initWithSentenceKey:senKey
scorrectAnswers:[NSMutableArray new]];
return [newScore autorelease];}

我正在尝试使用此方法删除可变数组上的AllObjects:

- (void)removeArrayObjects;{
[scorrectAnswers removeAllObjects];}

...我从另一个程序中调用它,如下所示:

for (Scores *sScore in scores)
{
[sScore removeArrayObjects];
}

...运行时出现此错误:

-[__NSArrayI removeAllObjects]:无法识别的选择器发送到实例 0x53412d0

谁能告诉我我在这里做错了什么?谢谢。

最佳答案

您没有处理 NSMutableArray,因为错误表明您有一个不可变的 NSArray

这个问题可能就是你的答案NSMutableArray addObject: -[__NSArrayI addObject:]: unrecognized selector sent to instance

基本上,您在定义@property时使用的copy将导致使用生成setter

scorrectAnswers = [newMutableArray copy];

它返回一个不可变的NSArray

您可以重新实现此方法并将上一行更改为:

scorrectAnswers = [newMutableArray mutableCopy];

或使用retain代替copy

plist获取数据时也会发生这种情况

如果您使用plist,它将返回一个NSArray,即使您保存NSMutableArray,它也会被强制转换。因此,在检索时,您需要执行以下操作:

scorrectAnswers = [[NSMutableArray alloc] initWithArray:[userDefault objectForKey:@"my_array_key"]]

关于iphone - 如何删除属于另一个对象一部分的 NSMutableArray 上的所有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7169323/

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