我已经查看了很多帖子,这些帖子说明了从数组中正确删除对象的各种方法,但我不确定哪种方法最适合在我的实例中使用。我从plist加载一个字典,这个字典包含许多数组,这些数组包含另一个字典。所以我有3个存储设备设置,1个用于保存整个字典,另一个用于数组,最后是用于保存数组中对象的字典:
部首:
NSMutableDictionary *questionsDictionary;
NSMutableArray *questionsArray;
NSDictionary *currentQuestion;
@property (nonatomic, retain) NSMutableDictionary *questionsDictionary;
@property (nonatomic, retain) NSMutableArray *questionsArray;
@property (nonatomic, retain) NSDictionary *currentQuestion;
所以我的第一个问题是如上所述,是(非原子的,保留)正确的东西用于以下代码。
接下来,我从plist中加载我的字典:
的.m:
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"MultipleChoice.plist"];
self.questionsDictionary = [[NSDictionary dictionaryWithContentsOfFile:finalPath] retain];
然后我根据我的问题类型基于类型设置我的问题数组:
- (void)setupQuestionType : (NSString *)qType
{
if ([self.questionsDictionary objectForKey:qType])
{
self.questionsArray = [self.questionsDictionary objectForKey:qType];
[self pickRandomQuestion];
}
}
最后(这是我收到错误的地方),我想从这个问题类别中随机抓取一个问题:
// Pick a random question number based upon amount of questions
int randomQuestionNum = [[NSNumber numberWithInt:(arc4random() % [self.questionsArray count])] intValue];
// Grab the dictionary entry for that question
currentQuestion = [self.questionsArray objectAtIndex:randomQuestionNum];
// Remove the question from the available questions
[self.questionsArray removeObjectAtIndex:randomQuestionNum]; (Error here)
// Set the question text
self.question.text = [currentQuestion objectForKey:kQuestionkey];
现在,如果我注释掉removeObjectAtIndex行,那么代码运行正常,我的问题会显示在屏幕上。这让我相信它不是一个空指针。所以逻辑上的答案指出self.questionsArray不是NSMutableArray的事实。所以我在设置数组时尝试了以下内容:
- (void)setupQuestionType : (NSString *)qType
{
if ([self.questionsDictionary objectForKey:qType])
{
NSMutableArray *temp = (NSMutableArray *)[self.questionsDictionary objectForKey:qType];
self.questionsArray = (NSMutableArray *)temp;
[self pickRandomQuestion];
}
}
纯粹是为了看看我是否可以输入它,但错误仍然存在。任何人都可以了解我做错了什么,或采取最佳方法吗?
答案 0 :(得分:4)
不要将NSArray强制转换为NSMutableArray。代替:
NSArray *temp = [self.questionsDictionary objectForKey:qType];
self.questionsArray = [NSMutableArray arrayWithArray:temp];
// code not tested.