Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何移除属于另一个对象的NSMutableArray上的AllObject?_Iphone_Nsmutablearray - Fatal编程技术网

Iphone 如何移除属于另一个对象的NSMutableArray上的AllObject?

Iphone 如何移除属于另一个对象的NSMutableArray上的AllObject?,iphone,nsmutablearray,Iphone,Nsmutablearray,我有一个对象定义如下: 分数。h: @interface Scores : NSObject { NSString *sentenceKey; NSMutableArray *scorrectAnswers; } @property (nonatomic, copy) NSString *sentenceKey; @property (nonatomic, copy) NSMutableArray *scorrectAnswers; + (id)addScore:(NSString *)

我有一个对象定义如下: 分数。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];}
我正在尝试使用以下方法删除可变数组上的AllObject:

- (void)removeArrayObjects;{
   [scorrectAnswers removeAllObjects];}
…我从另一个程序调用它,如下所示:

for (Scores *sScore in scores)
{   
    [sScore removeArrayObjects];
}
。。。当我运行它时,会出现以下错误:

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


有人能告诉我我做错了什么吗?谢谢。

它看起来不像是由
scorrectAnswers
指向的内存实际上指向了一个
NSMutableArray
。在何处以及如何初始化该变量?如果直接使用自动释放对象设置ivar,如:

scorrectAnswers = [NSMutableArray arrayWithCapacity:10];

然后,自动释放的数组将被销毁,因为您没有保留(或复制它)。如果该内存被重新分配到指向另一个对象,您将看到一个错误,就像您正在得到的一样,具有意外的类型。如果未重新分配内存,则会出现EXC\u BAD\u访问错误。

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

这个问题可能就是你的答案

基本上,定义
@属性时使用的
副本
将导致使用

scorrectAnswers = [newMutableArray copy];
它返回一个不可变的
NSArray

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

scorrectAnswers = [newMutableArray mutableCopy];
或者使用
retain
而不是
copy

plist

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

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

与上面提到的类似,我有一个NSMutableArray,它在我的代码中被重新分配为NSArray。一旦我将其修改为正确的NSMutableArray,它就解决了我的问题


我建议进行快速搜索,以确保您没有在项目中的某个位置重新分配数组并进行相应修改。

我不确定这是否是一个
自动释放问题,但我确实考虑过这一问题,因为没有使用getter/setter。感谢您非常有用的回答。我没有使用plist。这就是我创建数组的方式:[sentenceScore setScorrectAnswers:correctAnswers];因此,如果在我的@属性语句中使用保留而不是复制,您认为这会解决我的问题吗?应该这样做,但是如果您打算使用<代码>复制< /代码>,那么您应该考虑将其保留为<代码>复制< /代码>,但使用<代码> MutabelCopy实现SETTER。谢谢