rei*_*d55 2 iphone nsmutablearray
我有一个像这样定义的对象:Scores.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;
Run Code Online (Sandbox Code Playgroud)
Score.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];}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用此方法删除可变数组上的AllObjects:
- (void)removeArrayObjects;{
[scorrectAnswers removeAllObjects];}
Run Code Online (Sandbox Code Playgroud)
...我从另一个程序中调用这样的:
for (Scores *sScore in scores)
{
[sScore removeArrayObjects];
}
Run Code Online (Sandbox Code Playgroud)
...当我运行它时,我收到此错误:
- [__ NSArrayI removeAllObjects]:无法识别的选择器发送到实例0x53412d0
谁能告诉我这里我做错了什么?谢谢.
Pau*_*l.s 12
你没有处理一个NSMutableArray错误表明你有一个不可变的NSArray.
这个问题可能是你的答案NSMutableArray addObject: - [__ NSArrayI addObject:]:无法识别的选择器发送到实例
基本上,copy您在定义@property遗嘱时使用会导致使用生成setter
scorrectAnswers = [newMutableArray copy];
Run Code Online (Sandbox Code Playgroud)
返回一个不可变的NSArray.
您可以重新实现此方法并更改上一行:
scorrectAnswers = [newMutableArray mutableCopy];
Run Code Online (Sandbox Code Playgroud)
或使用retain而不是copy
从a获取数据时也会发生这种情况 plist
如果你正在使用plist它,它将返回一个NSArray即使你保存NSMutableArray它将被施放.因此,在检索时,您需要执行以下操作:
scorrectAnswers = [[NSMutableArray alloc] initWithArray:[userDefault objectForKey:@"my_array_key"]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6818 次 |
| 最近记录: |