iOS - Kerndatenmodell Konflikt mit Mail Framework?

8

Ich habe ein Core Data Objekt, Account , repräsentiert als eine Unterklasse von NSManagedObject :

%Vor%

Meine gesamte App hat sich gut entwickelt. Wenn ich jedoch MessageUI.framework hinzufüge, um einen E-Mail-View-Controller zu erstellen, bricht die Hölle los. Die App verlinkt und kompiliert gut und läuft gut. Bis, das heißt, ich beginne mit meinen zuvor arbeitenden Account -Objekten zu interagieren. Dann bekomme ich diese:

%Vor%

Diese besondere wurde verursacht durch:

%Vor%

Nun, ich vermute, dass es in der MessageUI.framework eine Klasse gibt, die den Konflikt verursacht, aber ich habe ein paar Fragen:

  1. Die App kompiliert und läuft gut, keine Namenskonflikte bei der Kompilierung
  2. Die anderen Komponenten im Framework scheinen Präfix-Namespaced zu sein (zB: MFMailComposeViewController ), sollte also das theoretische Konto nicht MFAccount ?
  3. sein
  4. Ich mache nicht einmal eine #import <MessageUI/MessageUI.h> oder die etwas engere #import <MessageUI/MFMailComposeViewController.h> , die letztere, die ich inspizierte und keine Definition von Account sah, also bin ich mir nicht sicher, warum die möglichen Konflikte überhaupt geladen würden .
  5. Nur um sicher zu gehen, habe ich meine Core Data-Klassen neu generiert und alle Simulator-Einstellungen zurückgesetzt, immer noch keine Würfel.
  6. Durch das Entfernen des Frameworks aus dem Projekt und das Erstellen von Einstellungen wird das Problem sofort behoben.
Josh 25.09.2012, 02:54
quelle

2 Antworten

8

Ich hatte das mit mir passiert, mit diesem exakten Framework (die Klasse hieß Broadcaster ). In diesem Fall ist das private Message -Rahmenwerk mit MessageUI verknüpft, und dieses Framework stellt die Account -Implementierung bereit.

Sie können überprüfen, ob das MessageUI-Framework eine Account -Klasse lädt, indem Sie ein neues Projekt erstellen, und in der Methode application:didFinishLaunchingWithOptions: des Anwendungsdelegaten fügen Sie den folgenden Code hinzu:

%Vor%

Bei einem neuen Projekt wird accountClass = (null) gedruckt, aber nach dem Hinzufügen von MessageUI wird accountClass = Account gedruckt.

Wenn Sie class-dump für das private Message -Framework verwenden, sehen Sie außerdem die Schnittstellendeklaration für Account .

Nun listen Sie 5 Artikel in Ihrem Beitrag als Fragen auf, ich werde versuchen, sie anzusprechen

  1. Ich weiß nicht genug über den Link-Zeit-Prozess für die Arbeit mit Frameworks um sicher zu sagen, aber ich vermute, dass das Message Framework schwach verlinkt ist und somit keinen doppelten Symbolfehler zur Verbindungszeit verursacht.
  2. Die öffentlichen Gesichter sind korrekt benannt, aber einige nicht dokumentiert die sind nicht. Außerdem befindet sich die in Konflikt stehende Klasse im privaten Message -Framework.
  3. Das ist überhaupt nicht wichtig. Der Compiler verwendet #import , aber at Laufzeit, alle Klassen werden mit Ihrer Anwendung und dort geladen ist keine "Sichtbarkeit" oder ähnliches in der Laufzeit erzwungen.
  4. Nicht zutreffend
  5. Übereinstimmend mit anderen Beweisen

So weit wie eine Vorgehensweise, habe ich gerade meine Modellklasse umbenannt, um ein Präfix zu haben. Mir ist keine andere Lösung bekannt.

    
Carl Veazey 25.09.2012, 03:51
quelle
0

Es ist möglich, dass das Nachrichtenframework überhaupt nicht das Problem ist. Solche Dinge können unerwartet mit Kerndaten passieren, etwa wenn Sie das Modell irgendwie ändern. Versuchen Sie, den Build zu bereinigen, Ihre Simulator- / Hardware-installierten Test-Apps zu löschen und erneut auszuführen. Der Grund, warum Gerald William vorgeschlagen hat, es umzubenennen, denke ich, besteht darin, dieses Problem zu beheben, aber es ist möglicherweise nicht nötig, etwas umzubenennen.

Sehen Sie sich diesen Thread an: NSManagedObjectModel für Entity konnte nicht gefunden werden

    
shim 25.09.2012 03:49
quelle