2014-09-13 8 views
5

Ich habe vor kurzem iOS 8, um sicherzustellen, dass meine bestehende App funktioniert mit dem Download, aber ich bin eine Warnung im Debugger auf Start bekommen:Kerndaten: Kann Klasse laden namens „CDAccount“

"CoreData: warning: Unable to load class named 'CDAccount' for entity 'CDAccount'. 
Class not found, using default NSManagedObject instead." 

Nach einigen Nachforschungen scheint es, als hätten die Leute ähnliche Probleme bei der Verwendung von Core Data in Swift, aber mein gesamter Code ist in Objective-C (und das Datenmodell hat sich seit mindestens 6 Monaten nicht geändert).

Jeder Rat wird sehr geschätzt, ich bin wirklich nervös, dass meine App nicht richtig funktionieren wird, wenn die Leute mit dem Upgrade auf iOS 8 beginnen!

+0

Nicht sicher diese aber sind Sie sicher, dass Ihre Klasse ein Mitglied des Ziels Sie bauen? – fzaziz

+0

Verwenden Sie die Social- oder Accounts-Frameworks in Ihrer Anwendung? Das Accounts-Framework verwendet Core-Daten intern, und wenn Speicher bereitgestellt wird, ist CDAccount die Core Data-Entität, die das ACAccount-Objekt in der öffentlichen Schnittstelle unterstützt. – quellish

+0

Oh wirklich? Kannst du mich mit der Dokumentation verlinken? Ich konnte es nicht finden. – Mason

Antwort

16

Ich hatte genau das gleiche Problem in Objective-C und Xcode 6. Aus irgendeinem Grund hatte Xcode meine 'CustomNSManagedObject'.m Klassen aus meinen Compile Sources entfernt.

Gehen Sie zu Ihrem Projektziel -> Phasen beim Aufbau -> Compile Sources und verwenden Sie die Taste + CDAccount.m hinzufügen

Wenn Sie Mogenerator verwenden eine _CDAccount.m-Datei zu erstellen, hinzufügen, dass zu Ihrer Compile Sources auch.

+8

Mein Objekt war bereits in Kompilierquellen und ich bekomme immer noch den Fehler in Xcode 6 – PostCodeism

+0

@PostCodeism, siehe die entsprechende Antwort von Lucien. Es hat den Trick für mich getan: http://stackoverflow.com/questions/25076276/unabled-to-find-specific-subclass-of-nsmanagedobject –

+0

Dies behoben mein Problem. Anstatt Buildphasen zu verwenden, um den Quellcode hinzuzufügen, klickte ich einfach auf die .m-Datei, die bereits als Datei im Projekt aufgeführt war, und prüfte dann die Target-Mitgliedschaft im Fenster Dienstprogramme> Dateiinspektor. Warum XCode die .m-Datei entfernt hat, ist total komisch. Vielleicht wurde es nie von Anfang an hinzugefügt. Es gibt nicht viel in der .m-Datei außer ein paar @dynamic-Anweisungen. – Brainware

2

Es scheint ein Xcode Bug/Problem zu sein. Ich verwende Xcode 6.3.1

  • Klick auf Ihre Kerndateneinheit (xxx.xcdatamodeld), dann wählen Sie das Objekt, und im Attribute-Inspektor sehen Sie, dass die Klasse des Entity-Namen festgelegt ist: PRODUCT_MODULE_NAME.xxx, wobei "xxx" der Name Ihrer Entität ist.

Lösung: Sie müssen PRODUCT_MODULE_NAME durch den Namen Ihrer App ersetzen.

Wenn Zweifel über die Namen der App, überprüfen Sie unter ‚bauen Einstellungen‘, Filter auf ‚product_module_name‘, und Sie werden Ihre App-Namen unter ‚Verpackung‘

  • in einigen Fällen (mein Fall) finden Die Datenmodelldatei (swift oder objective-c) wird ebenfalls von Xcode aus dem Projekt entfernt. Sie ist zwar noch auf der Festplatte vorhanden, Sie müssen sie jedoch erneut hinzufügen. Also in diesem Fall nehmen Sie die Datei ‚CDAccount.m‘ & es wieder in Ihrem Projekt fallen (oder eine andere der mehreren Möglichkeiten nutzen, um dies zu tun)
7

Entfernen Sie den „Punkt“ in Konfigurationen „Default“ auf. xcdatamodeld:

enter image description here

zu:
enter image description here
enter image description here
Erstellen Sie die Anwendung neu.

+1

Danke dafür. Ich habe alle anderen Fixes ausprobiert (die alle leicht in vielen verschiedenen, aber ähnlichen Fragen zu SO zu finden sind. Dies hat mein Problem nach stundenlangen Kopfschmerzen endlich behoben. – Amos

+1

Für mich hat das Hinzufügen des Punktes geholfen. – Gamec

0

Mein Problem war ähnlich, aber die aufgelisteten Lösungen funktionierten nicht, weil meine CD-Klassen in einem Framework gespeichert wurden. Die Lösung bestand darin, die Klassennamenrepräsentation in "frameworkName.className" zu ändern. Das xcdatamodel erlaubte es mir jedoch nicht, dies zu ändern, also musste ich "Inhalt anzeigen" in der Datei anzeigen, die Datei "contents" in XCode öffnen und die Änderungen selbst vornehmen.

2

Mein Problem war auch ähnlich, aber der Grund war, dass Modul der Entität nicht festgelegt wurde.

module selection in Entity properties menu