2016-05-23 9 views
0

CacheStation関数を呼び出すと、エラーが発生します:CoreData:error:NSManagedObjectクラスSaveModelで指定された初期化子を呼び出すことができませんでした。それ以上のものはありません。この問題を解決するにはどうすればよいですか?CoreData:エラー:NSManagedObjectカスタムクラスで指定された初期化子を呼び出すことができません

SaveModel.swift:

import Foundation 
    import CoreData 
    import UIKit 

class SaveModel: NSManagedObject { 

    func CacheStations(){ 
     // create an instance of our managedObjectContext 
     let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 

     // we set up our entity by selecting the entity and context that we're targeting 
     let entity = NSEntityDescription.insertNewObjectForEntityForName("CachedStations", inManagedObjectContext: moc) as! SaveModel 

     //add the data 
     entity.land = "nl"; 

     // we save our entity 
     do { 
      try moc.save() 
     } catch { 
      fatalError("Failure to save context: \(error)") 
     } 
} 

SaveModel + CoreDataProperties.swift:私はCacheStationsを呼び出す

import Foundation 
import CoreData 

extension SaveModel { 
    @NSManaged var land: String? 
} 

import UIKit 

class ViewController: UIViewController { 

    @IBAction func saveShizzle(sender: AnyObject) { 
     let sm = SaveModel(); 
     sm.CacheStations(); 
    } 
} 
+0

CacheStationsを呼び出すコードを表示できますか? – pbasdf

+0

@pbasdfコードを追加しました。私は一歩前進しました。それはlet sm = SaveModel();でクラッシュしました。 – da1lbi3

答えて

1

この行:

let sm = SaveModel(); 

SaveModelのインスタンスを作成するために、標準的なinit()方法を使用するが、NSManagedObjects指定初期化子用いて初期化されなければならない:同様に、

init(entity entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) 

(あるいは指定された初期化子を呼び出すNSEntityDescription.insertNewObjectForEntityForName(_, inManagedObjectContext: moc)を使用して、あなたのCacheStationsメソッド)。

smのみCacheStationsを呼び出すためのインスタンスを持って作成されて、私はクラスメソッドにその方法を変更しますようですので:

class func CacheStations(){ 

とクラスメソッドを使用するようにsaveShizzle方法を変更します。

@IBAction func saveShizzle(sender: AnyObject) { 
    SaveModel.CacheStations(); 
} 
0

はここで何が起こるかです:

  1. let sm = SaveModel();に電話すると、SaveModelという新しいインスタンスが作成されます。
  2. SaveModelNSManagedObject
  3. NSManagedObjectのサブクラスであるinit(_: insertIntoManagedObjectContext:)
  4. と呼ばれる指定イニシャライザは、あなたのサブクラスでは、初期化子を指定されたスーパークラスを呼び出す必要がありますことを意味し、いかなる種類の初期化子を追加しませんしました。
  5. これは行わないので、正確な問題を説明するエラーメッセージが表示されます。

NSManagedObject指定された初期化子を呼び出すか、スーパークラス指定の初期化子を呼び出す独自の指定された初期化子を作成する必要があります。

関連する問題