NSMutableArray removeObjectAtIndex que causa un SIGABRT inesperado

He mirado varias publicaciones que indican varias forms de eliminar correctamente un object de una matriz, pero no estoy seguro de qué método es el mejor para usar en mi instancia. Estoy cargando un dictionary de un plist, este dictionary contiene numerosas matrices, y estas matrices contienen otro dictionary. Entonces tengo 3 configuraciones de dispositivos de almacenamiento, 1 para contener el dictionary general, otro para una matriz y finalmente un dictionary para contener el object de la matriz:

Encabezamiento:

NSMutableDictionary *questionsDictionary; NSMutableArray *questionsArray; NSDictionary *currentQuestion; @property (nonatomic, retain) NSMutableDictionary *questionsDictionary; @property (nonatomic, retain) NSMutableArray *questionsArray; @property (nonatomic, retain) NSDictionary *currentQuestion; 

Entonces mi primera pregunta es hacer con lo anterior, son (no atómicos, retener) las cosas correctas para usar para el siguiente código.

A continuación, carga en mi dictionary desde el plist:

.metro:

 NSString *path = [[NSBundle mainBundle] bundlePath]; NSString *finalPath = [path stringByAppendingPathComponent:@"MultipleChoice.plist"]; self.questionsDictionary = [[NSDictionary dictionaryWithContentsOfFile:finalPath] retain]; 

Luego configuré mi set de preguntas basado en el tipo basado en mi tipo de pregunta:

 - (void)setupQuestionType : (NSString *)qType { if ([self.questionsDictionary objectForKey:qType]) { self.questionsArray = [self.questionsDictionary objectForKey:qType]; [self pickRandomQuestion]; } } 

Finalmente (aquí es donde obtengo el error), quiero tomar una pregunta random de esta categoría de preguntas:

 // 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]; 

Ahora, si comento la línea removeObjectAtIndex, el código funciona bien y mi pregunta se muestra en la pantalla. Esto me lleva a creer que no es un puntero nulo. Entonces, la respuesta lógica apunta al hecho de que self.questionsArray no es un NSMutableArray. Entonces probé lo siguiente al configurar la matriz:

 - (void)setupQuestionType : (NSString *)qType { if ([self.questionsDictionary objectForKey:qType]) { NSMutableArray *temp = (NSMutableArray *)[self.questionsDictionary objectForKey:qType]; self.questionsArray = (NSMutableArray *)temp; [self pickRandomQuestion]; } } 

Puramente para ver si podría escribir_cast, pero el error aún ocurre. ¿Alguien puede arrojar algo de luz sobre lo que estoy haciendo mal o el mejor enfoque para tomar?

No imprima NSArray en NSMutableArray. En lugar:

 NSArray *temp = [self.questionsDictionary objectForKey:qType]; self.questionsArray = [NSMutableArray arrayWithArray:temp]; // code not tested.