2016-04-28 9 views
0

Xcode 7.3でCore Data with Swiftを使用すると、奇妙なエラーが発生します。Xcode 7.3でSwiftを使用してコアデータ管理対象オブジェクトをインスタンシエート

最近私のコードベースをSwift 1.0からSwift 2.2に更新しました。NSManagedObject拡張の特定の要素にアクセスしようとするとエラーになります。

以下に示すように、私はクラス名とモジュールは、私は他の記事で見てきたものに一致すると、データモデル内のエンティティ(ここでは呼ばれるメンバーを)設定した

Screenshot of Inspector View of Member Entity

@objc(メンバー) クラスのメンバー:クラス自体は、次の最上位の宣言がありNSManagedObject {

をそして、それはいくつかのだと私は両方の取り外しと上部に@objc一部を追加しようとしました私が人々に言及したことは問題を引き起こすかもしれないと言いました

下図のように私はNSManagedObjectの延長でconvenicnece初期化子を通じて私NSManagedObjectsのインスタンスをインスタンス化:私はメンバーオブジェクトの特定のプロパティを設定しようとすると、

convenience init(context: NSManagedObjectContext, className: String) { 
    let entity = NSEntityDescription.entityForName(className, inManagedObjectContext: context) 
    self.init(entity: entity!, insertIntoManagedObjectContext: context) 
} 

最後にエラーが発生します。私はそれがプロパティがオプションであるかどうかとは関係ないかもしれないと思ったが、周りのスイッチを変更しても効果はないようだ。

私が手にエラーがEXEC_BAD_ACCESSエラーですが、私がメンバーオブジェクトをインスタンス化するときにプリントアウトされます、次のことに由来するそうです:

MyAppName[23325:891360] CoreData: warning: Unable to load class named 
'MyAppName.Optional("Member")' for entity 'Member'. Class not found, 
using default NSManagedObject instead. 

私は不明だとして任意の洞察力をいただければ幸いです何を試してみるべきか、なぜクラス名の先頭に ".Optional"を追加するのかということです。

ありがとうございます。

+0

どのようにクラス名をフェッチしていますか? –

+0

'className'を表示し、あなたの' init'に渡されているものを確認してください。 –

答えて

0

オプションでアンラップを強制しないでください。NSEntityDescription.entityForNameから返されます。おそらくエンティティにガードレットを置いて、エンティティが戻ってこない場合はスローする必要があります。

私は、この便利な方法は、ちょうどNSEntityDescription.insertNewObjectForEntityForName(_:inManagedObjectContext:)を呼び出す以上の何かを購入すると疑う。あなたはまだ魔法の文字列と文脈を扱っています。

関連する問題