2016-08-09 49 views
0

berühren Ich habe Maintableview (a UIViewController) mit Inhalt und detailview (a UIViewController), die für jede der Zellen in Maintableview Detail zeigen.
Ich habe eine "Lieblings" -Taste in "Detailansicht" hinzugefügt, die Benutzer zu Favoritetableview hinzufügen kann (ein UIViewController) und alles gut funktionieren.App Absturz, wenn ich bestimmte Zelle in UITableView

Jetzt habe ich hinzugefügt "zu Favoriten hinzufügen" in Maintableview mit Swipe nach links. Es fügt Inhalt erfolgreich zu Favoritetableview hinzu, aber wenn ich diese Zelle in Favoritetableview berühre, stürzt die APP ab.

Unten finden Sie die Konsolenprotokolle für den Absturz:

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]' 
*** First throw call stack: 
(
    0 CoreFoundation      0x000000010a871d85 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x000000010a2e3deb objc_exception_throw + 48 
    2 CoreFoundation      0x000000010a75a934 -[__NSArrayI objectAtIndex:] + 164 
    3 iranbirds       0x00000001075cf672 -[FavoriteTableViewController prepareForSegue:sender:] + 530 
    4 UIKit        0x00000001090c55d5 -[UIStoryboardSegueTemplate _performWithDestinationViewController:sender:] + 369 
    5 UIKit        0x00000001090c5433 -[UIStoryboardSegueTemplate _perform:] + 82 
    6 UIKit        0x0000000108b1b5f8 -[UIViewController performSegueWithIdentifier:sender:] + 99 
    7 iranbirds       0x00000001075cf42d -[FavoriteTableViewController tableView:didSelectRowAtIndexPath:] + 189 
    8 UIKit        0x0000000108ac51c6 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1887 
    9 UIKit        0x0000000108ac541b -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 388 
    10 UIKit        0x0000000108989f62 _runAfterCACommitDeferredBlocks + 317 
    11 UIKit        0x000000010899de4c _cleanUpAfterCAFlushAndRunDeferredBlocks + 95 
    12 UIKit        0x00000001089aa147 _afterCACommitHandler + 90 
    13 CoreFoundation      0x000000010a796c37 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 
    14 CoreFoundation      0x000000010a796ba7 __CFRunLoopDoObservers + 391 
    15 CoreFoundation      0x000000010a78c7fb __CFRunLoopRun + 1147 
    16 CoreFoundation      0x000000010a78c0f8 CFRunLoopRunSpecific + 488 
    17 GraphicsServices     0x000000010be6bad2 GSEventRunModal + 161 
    18 UIKit        0x000000010897df09 UIApplicationMain + 171 
    19 iranbirds       0x00000001075d32ef main + 111 
    20 libdyld.dylib      0x000000010ba6492d start + 1 
    21 ???         0x0000000000000001 0x0 + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Lieblingstabellenansicht:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSIndexPath *indexPath = (NSIndexPath *)sender; 
    Favorite *fav = (Favorite *)[self.fetchedResultsController objectAtIndexPath:indexPath]; 
    NSString *combinedName = fav.name; 

    if ([segue.identifier isEqualToString:@"FavoriteBirdDetail"]) 
    { 
     GeneralViewController *detailViewController = (GeneralViewController*)[segue destinationViewController]; 

     detailViewController.birdName = [combinedName componentsSeparatedByString:@"^"][0];; 
     detailViewController.sciName = [combinedName componentsSeparatedByString:@"^"][1];; 
     detailViewController.managedOjbectContext = self.managedOjbectContext; 
    } 

} 

Diese Linie Ursache Fehler:
detailViewController.sciName = [combinedName componentsSeparatedByString:@"^"][1];

Jede Hilfe wäre geschätzt.

+0

Welche Linie ist es zum Absturz auf? Sie haben versucht, mit einem Element auf das zweite Element eines Arrays zuzugreifen – Paulw11

+0

Bitte updaten mit crashlog !! –

+0

Ich fand crash line.but wenn Kommentar diese Zeile Ursache Benutzer kann die gleiche Zelle zweimal zu favoritetaableview hinzufügen. (Einmal aus dem Detail und ein anderes Mal von Swipe nach links von der Haupttabelle anzeigen) –

Antwort

0
detailViewController.sciName = [combinedName componentsSeparatedByString:@"^"][1]; 

Nun, schauen Sie sich diesen Code an - Sie erhalten das zweite Objekt von einem Array durch Subscript-Syntax. Und der Code würde funktionieren, wenn ein Array mindestens 2 Elemente enthält.

Es sieht so aus, als ob Ihr Array null oder ein Element enthält, deshalb stürzt die App ab, wenn Sie versuchen, ein Element um 1 Index zu bekommen - [1], was das zweite Element bedeutet.

Absturz zu verhindern, sollten Sie eine Array count Eigenschaft zu überprüfen, bevor:

NSArray *anArray = [combinedName componentsSeparatedByString:@"^"]; 

if anArray.count >= 2 { 
    detailViewController.sciName = anArray[1]; 
} 
+0

thanks.its behoben .aber ich habe immer noch Probleme mit Duplizieren Zelle, die hinzugefügt wird, um favoritetaableview. (einmal aus dem Detail und ein anderes Mal von Swipe nach links von der Hauptansicht) –

+0

Ok, wenn meine Antwort half Ihnen - bitte akzeptieren Sie, Zellverdopplung ist eine andere Frage, und Sie sollten es separat fragen. –