¿Intenta insert ningún object desde los objects ?

En mi aplicación tengo una UITableView y algunos botones que el usuario puede hacer clic para orderar la matriz en el order basado en algunos NSDate's o ints. Entonces este es mi método para tratar de orderar mi UITableView:

- (void)sortStats:(id)sender reloadData:(BOOL)dataBool { NSSortDescriptor *descriptor = nil; UIButton *clickedButton = (UIButton*)sender; if (clickedButton.tag == 1) { descriptor = [NSSortDescriptor sortDescriptorWithKey:@"Date" ascending:NO]; } [self.cellArray sortUsingDescriptors:[NSArray arrayWithObject:descriptor]]; [[NSUserDefaults standardUserDefaults] setObject:self.cellArray forKey:@"cellArray"]; if (dataBool) { [ivstatstableView reloadData]; } [ivstatstableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES]; } 

Así que originalmente solo tenía este método sin el parámetro reloadData porque parecía que reloadData en UITableView estaba causando el locking.

Esto es lo que es el logging de locking de la console:

Terminar la aplicación debido a la exception no detectada 'NSInvalidArgumentException', motivo: '*** – [__ NSPlaceholderArray initWithObjects: count:]: intenta insert ningún object desde los objects [0]'

De todos modos, ¿hay algún código aquí que esté causando este locking? Realmente quiero que esta funcionalidad funcione en mi aplicación y sé que estoy cerca de solucionarlo, pero no estoy seguro de qué está causando este problema.

¿Algunas ideas?

Hay al less un lugar donde esto podría estar sucediendo, y tal vez otros. En el código donde obtiene los contenidos de los valores pnetworkingeterminados del usuario, no verifica nada. Entonces, en lugar de esto:

 [self.cellArray addObjectsFromArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"array"]]; 

es posible que desee probar esto:

 NSArray *defaultCellArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"array"]; if (defaultCellArray) { [self.cellArray addObjectsFromArray:defaultCellArray]; } 

También es posible que la llamada initWithObjects que falla (de acuerdo con su post de error) esté anidada en otra llamada, tal vez en esta llamada:

 [self.cellArray sortUsingDescriptors:[NSArray arrayWithObject:descriptor]]; 

Si observa la stack de llamadas completa, le dirá si esta llamada realiza llamadas posteriores a initWithObjects y, posiblemente, la pasa a nil . En su caso, por ejemplo, pasaría en un nil la matriz que está creando si hace clickedButton.tag aún no se ha establecido en un valor de 1 o 2. Es posible que desee agregar otra cláusula adicional para ayudar a diagnosticar el problema :

 if (clickedButton.tag == 1) { descriptor = [NSSortDescriptor sortDescriptorWithKey:@"Date" ascending:NO]; } else if (clickedButton.tag == 2) { descriptor = [NSSortDescriptor sortDescriptorWithKey:@"Score" ascending:NO]; } else { NSLog(@"Unexpected error: Can't determine sort descriptor"); } 

Todo esto es bastante complicado, pero queda una cosa:

 [[NSUserDefaults standardUserDefaults] setObject:self.cellArray forKey:@"cellArray"]; 

Creo que deberías cambiar eso a esto:

 NSArray *array = [NSArray arrayWithArray:self.cellArray]; [[NSUserDefaults standardUserDefaults] setObject:array forKey:@"cellArray"]; 

En segundo lugar, agregue asserts () después de cada lugar donde crea que debería tener un object, es decir:

 UIButton *theButton = ... assert(theButton); 

También dice que el número de filas es el doble del recuento de cellArray, supongo que es intencional.