2015-04-09 5 views
8

Ich habe gerade mein Projekt auf swift 1.2 aktualisiert. Und nach 5 oder 6 aufeinander folgenden 'Konvertieren zu neuesten Swift' Aktion, konnte ich es kompilieren. Dann hatte ich viele meiner UI-Test fehlgeschlagen. Es war aufgrund der Tatsache, dass meine 'NSFetchedResultsControllerDelegate' nicht mehr aufgerufen wurde.Abgerufener Ergebnis Controller-Delegat, der nicht nach swift 1.2/xcode 6.3 update aufgerufen wird

Nachdem (ich könnte sagen) ein sehr glücklicher Versuch, fand ich, dass es aufgrund der Tatsache, dass mein Delegierter kein NSObject war. Also konnte ich es beheben, indem ich NSObject subklassifiziere oder @obj hinzufügte.

Vorher:

class BasicFetchedResultControllerDelegate : NSFetchedResultsControllerDelegate 

Nach:

class BasicFetchedResultControllerDelegate : NSObject, NSFetchedResultsControllerDelegate 

Ich glaube nicht, dass ich etwas sah, dazu im Änderungsprotokoll verwendet. Was sind die Veränderungen, die dazu führen? Haben Sie andere Änderungen bemerkt?

Antwort

7

ich das von Apple erhalten, nachdem ich einen Fehlerbericht gefüllt:

verhält sich dieses Problem auf den folgenden basieren sollte:

Dies ist eine Verhaltensänderung in Swift 1.2: Methoden in nicht- Objective-C-abgeleitete Klassen werden nicht mehr implizit als @objc markiert, selbst wenn sie einem Objective-C-Protokoll entsprechen. Sie können die Methoden explizit mit dem @objc-Attribut markieren, wenn Sie NSObject nicht erweitern möchten. Dies wird in den Versionshinweisen zu Xcode 6.3 unter https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/Chapters/xc6_release_notes.html#//apple_ref/doc/uid/TP40001051-CH4-SW3 beschrieben.

+1

‚NSObjectProtocol‘ erstrecken habe ich meinen Kopf seit Tagen stoßen fragen, warum Delegatmethoden nicht aufgerufen werden, bis ich dieses Problem gefunden. Apple sollte es als Kompilierfehler markieren. Lektion gelernt: Zögere nicht, Swift-Klassen NSObject zu erben. – hebinda

+0

Wenn ich versuche, NSObject in meiner Klasse hinzuzufügen, bekomme ich ** Mehrfache Vererbung von den Klassen 'UITableViewController' und 'NSObject' **, während das Hinzufügen der @objc() -Deklaration die Methode nicht so verhält, wie sie sollte. Was könnte ich sonst noch versuchen? – carlodurso

+0

Ein anderer Vorbehalt, Swift ignoriert Delegatmethoden in generischen Klassen stillschweigend, selbst wenn die Klasse 'NSObject' erweitert oder' @object_content_de verwendet, z. 'Klasse F : NSObject, NSFetchedResultsControllerDelegate' wird automatisch fehlschlagen. –

0

Core Data-Klassen verhalten sich immer noch sehr ähnlich wie ältere Objective-C-Klassen. Da NSFetchedResultsController ein @protocol ohne Superklasse ist, benötigt Swift die explizite Deklaration NSObject.

Und Sie haben Recht, es gibt nichts darüber in den Änderungsprotokollen.

+2

ich einen Fehler Apfel gefüllt, ich glaube, dass ‚NSFecthedResultsControllerDelegate‘ – valR

Verwandte Themen