Ich bin zur Zeit Fehlersuche Code von einem anderen Kollegen geschrieben, der eine Out of Bounds Fehler mit dem folgenden Code hat. Sie müssen ein Element in einem UINavigatorController auswählen. Es beinhaltet auch die Verwendung von coreData.out of bounds Fehler repopulating Array für Ziel c app (iPhone)
der Code sieht wie folgt aus (ein Teil des Codes wurde für die Fehlerbehebung und Klarheit entfernen war)
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// : so far no errors with these lines of code. indexPath returns [0,0] or [0,1];
NSLog(@" : *** DetailViewController/didSelectRowAtIndexPath() - executing method ...");
NSLog(@" : *** DetailViewController/didSelectRowAtIndexPath() - indexPath = %@",indexPath);
// : returns row number (as an integer)
NSLog(@": *** DetailViewController/didSelectRowAtIndexPath() indexPath.row = %d",indexPath.row);
// : managedObject returns coreData information.
// Directory *managedObject = (Directory *)[finalArray objectAtIndex:indexPath.row];
// NSLog(@": *** DetailViewController/didSelectRowAtIndexPath() managedObject = %@",managedObject);
// example return
/*
<Directory: 0x5919e50> (entity: Directory; id: 0x59195d0 <x-coredata://FE8A3A0C-A0E4-4E0E-A90D-8471227D2284/Directory/p3> ; data: {
ID = 48;
IsFile = 0;
LastChanged = "2011-01-04 14:39:00 +0000";
Name = "All Papers by Author";
ParentID = 7;
Type = pdf;
}
*/
// : returns the ID value from the managed object
self.num = [managedObject ID];
NSLog(@": *** DetailViewController/didSelectRowAtIndexPath() self.num (managedObject.ID) = %@",[managedObject ID]);
NSMutableArray *tempArray = [[NSMutableArray alloc] initWithArray:finalArray];
// : finalArray has two elements when this method runs
NSLog(@"eja: DetailViewController/didSelectRowAtIndexPath() finalArray length is %i",[finalArray count]);
[self.finalArray removeAllObjects]; // releases the objects, but makes the array empty;
// : finalArray after remove all objects runs
NSLog(@"eja: DetailViewController/didSelectRowAtIndexPath() finalArray length is %i",[finalArray count]);
// ** THE OUT OF BOUNDS ERROR OCCURS HERE **
[self.finalArray setArray:[self searchDatabase:[self.num intValue] withPredicate:@"ParentID"]];**
// NSLog(@": DetailViewController/didSelectRowAtIndexPath() finalArray is %@",self.finalArray);
// ... more code here, but not relevant.
// : release the temp NSMutable array
[tempArray release];
// : maybe release the finalArray?
}
Wenn ich die app debuggen, glaube ich finalArray soll (removeAllObjects) gelöscht werden und soll eine außerhalb der Grenzen Fehler
App beenden aufgrund nicht abgefangene Ausnahme ‚NSRangeException‘, Grund zu werden wieder aufgefüllt, aber ich bekomme: ‚* - [NSMutableArray objectAtIndex:]: Index 1 über Grenzen für leere Array‘
Nicht sicher, wo der Fehler herkommt, so für ein paar Ratschläge und Tipps suchen ...
EDIT: Ich habe eine neue Spur Anweisung nach der Anweisung removeAllObjects
// : finalArray after remove all objects runs
NSLog(@"eja: DetailViewController/didSelectRowAtIndexPath() finalArray length is %i",[finalArray count]);
es eine Zählung von 0 zurück Englisch: www.mjfriendship.de/en/index.php?op...39&Itemid=32 Also sollte ich dann vermuten, dass es, weil es keine Länge hat, keinen Platz hat, Speicher neu zuzuordnen, um neue Gegenstände hinzuzufügen Ich dachte, so würden Mutable-Arrays funktionieren (mehr oder weniger).
EDIT 2: Statt setArray, ich habe auch versucht, ObjectsFromArray hinzufügen, diese zu ersetzen:
[self.finalArray setArray:[self searchDatabase:[self.num intValue] withPredicate:@"ParentID"]];**
// mit diesem
[self.finalArray addObjectsFromArray:[self searchDatabase:[self.num intValue] withPredicate:@"ParentID"]];
aber ich hatte ein ähnlicher Fehler (außerhalb der Grenzen) zurück ...
Sie bitte Ihre Post bearbeiten und die mitgelieferte „Code“ Markup verwenden, um das Beispiel zu machen lesbar . Es ist sehr schwierig, Ihr Beispiel zu lesen, um das Problem zu identifizieren. Führen Sie außerdem Ihre App im Debugger und in der Identität aus, welche Zeile diese Ausnahme auslöst (im Xcode "run" -Menü gibt es eine "break on objective-c exceptions" -Option, die helfen sollte). Sobald Sie die für Ihren Unfall verantwortliche Linie identifizieren können, sollten Sie besser vorbereitet sein, um die zugrunde liegende Ursache zu identifizieren. – Jonah
Ich habe den Debugger ausgeführt. Die Codezeile, die den Fehler verursacht hat, war [self.finalArray setArray: [self searchDatabase: [self.num intValue] mit Predicate: @ "ParentID"]]; . Ich habe den Code oben überarbeitet, um dies zu verdeutlichen. Vielen Dank für Ihr Feedback. – djeddiej
@ Jonah Ich habe die Frage bearbeitet, um es richtig zu formatieren ... :) –