Invoke-block iOS
Ich versuche zu aufrufen, einige sperren, aber ich Laufe in einem EXC_BAD_ACCESS.
-(void) methodA {
self.block = ^ {
[self methodB];
};
}
-(void) webViewDidFinishLoad:(UIWebView *)webView {
[block invoke]; //error here (block is not valid id type).
}
-(void)methodB {
//do something
}
Irgendwelche Gedanken auf, warum dies passiert ist?
Wie ist die
block
- Eigenschaft definiert die Klasse?InformationsquelleAutor Matrosov Alexander | 2012-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie mit "kopieren" - Attribut, wenn Sie erklären, block-Eigenschaft. Wie:
InformationsquelleAutor murat
wenn Sie aufrufen möchten, der block-Sie können einfach tun dies
block();
statt[block invoke];
für mehr details, siehe die Block Themen Der Programmierung
das ist, weil Sie deklarieren es als id. Werfen Sie einen Blick auf diese Frage zu sehen, wie Sie erklären können, es richtig.
Dies ist die richtige Antwort.
Wie zu tun, die gleichen Sachen mit swift? ich meine, wenn ich einen Verschluss und ich möchte einfach anrufen func doneAction() { self.onActionSheetDone() }
InformationsquelleAutor Julien
Setzen Sie den block auf dem heap:
EDIT: @murat ' s Antwort ist korrekt, auch (und wahrscheinlich besser). Die eine oder andere Weise, Sie zu kopieren Sie den block, da die Blöcke erstellt werden, die auf dem stack und nicht auf dem heap.
Weitere Blöcke, die Sie wollen zu halten, um, siehe "Kopieren von Bausteinen" und "Muster zu Vermeiden" in der Dokumentation.
InformationsquelleAutor Art Gillespie
können Sie erklären, eine Eigenschaft für den block .h-Datei wie folgt und wird es nicht geben, schlecht-überschuss -
Stellen Sie sicher, dass Sie erklären, die Kopie nicht behalten, für mehr details, wie Eigenschaften deklarieren Bausteine der Programmierung von ios/objective-c
InformationsquelleAutor mithilesh