2014-12-06 80 views
0

我想刪除核心數據表(DatiGame)中的所有行,由4個字段組成。 foto_bottone0 foto_bottone1 foto_master vinto 和表格沒有其他關係。IOS Swift - deletedObjects NSManagedObject

但操作DeletedObjects返回以下錯誤:

'(NSManagedObject) - > $ T4' 不等同於 '的NSSet'

import UIKit 
import Foundation 
import CoreData 

class FirstViewController: UIViewController { 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view, typically from a nib. 

    // 1 
    var appDell:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
    var context:NSManagedObjectContext = appDell.managedObjectContext! 
    // 2 
    var request = NSFetchRequest(entityName: "DatiGame") 
    request.returnsObjectsAsFaults = false 

    println("pre fetch ") 
    // 3 

    var results = context.executeFetchRequest(request, error: nil) 

    if (results?.count > 0) { 

     for result: AnyObject in results! { 

    --> ERROR deleteObjects <--  
       context.deletedObjects(result as NSManagedObject)  // ERROR 
            '(NSManagedObject) -> $ T4' is not identical to 'NSSet'" 

      context.save(nil) 
     } 
    } 
} 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 

請,有人可以幫我嗎?其他問題: 您可以刪除表中的所有行而不循環?謝謝謝謝

回答

4

您正在調用錯誤的功能。使用 context.deleteObject(anObject)刪除管理對象。

deletedObjects是(粗略地講)屬性回報已被標記爲刪除所有對象 。

補充說明:

  • 爲了獲得更好的性能,保存所有對象已被刪除後上下文
  • 使用error參數用於診斷而不是通過nil
  • 更好地使用可選綁定來檢查executeFetchRequest() 的成功,而不是測試results?.count

實施例:

var error: NSError? 
let results = context.executeFetchRequest(request, error: &error) 
if let objects = results { 
    for object in objects as [NSManagedObject] { 
     context.deleteObject(object) 
    } 
    if !context.save(&error) { 
     println("save failed: \(error?.localizedDescription)") 
    } 
} else { 
    println("fetch failed: \(error?.localizedDescription)") 
}