UIBarButtonItem stürzt iphone app, wenn die Schaltfläche geklickt wird
-
21-08-2019 - |
Frage
UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:NULL];
rButton.action = @selector(refreshAction);
self.navigationItem.rightBarButtonItem = rButton;
[rButton release];
Der obige Code funktioniert auf eine Schaltfläche erstellen und in der Navigationsleiste hinzufügen, aber wenn ich auf die Schaltfläche klicken stürzt die App mit einem EXC_BAD_ACCESS. Wenn ich auf Kommentar rButton.action = @selector (refreshAction); Klick auf die Schaltfläche wird nicht alles tun, aber es entweder nicht abstürzt.
- (void)refreshAction {
NSLog(@"refreshAction");
}
Dieser Code ist in einer viewDidLoad Methode des Tableviewcontroller, die auf den Navigationstapel aus der NavigationViewController viewDidLoad Methode gedrückt wird.
Ich habe wahrscheinlich 3 Stunden damit verbracht, dies ohne Erfolg, zur Arbeit zu kommen.
Lösung
Wie üblich Speicherverwaltung war der Schuldige. Laden der Tableviewcontroller aus dem Navigation:
NearbyTableViewController *tableController = [[[NearbyTableViewController alloc] initWithNibName:@"NearbyTableViewController" bundle:nil] autorelease]; self.nearbyTableController = tableController;
[self pushViewController:self.nearbyTableController animated:YES]; [tableController release];
ein Objekt gesetzt Freigabe ... zu Autorelease ist der häufigste Fehler in der Speicherverwaltung sein. Löschen Sie diese Zeile [tableController release] löste das Problem
Andere Tipps
Glück gehabt, wenn Sie @selector(refreshAction)
angeben, wenn Sie die Schaltfläche zu erstellen, das heißt:.
UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshAction)];
Vielleicht ist das Ziel nicht gerettet werden, wenn Sie auch nicht die Aktion Initialisierungsstab angeben.
Ich bin mir nicht ganz 100% sicher, warum Ihr Code funktioniert nicht, aber die Wähler direkt im Konstruktor Einstellung funktioniert:
UIBarButtonItem *rButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
target:self
action:@selector(refreshAction)];