在Swift中使用Core Data的问题

时间:2014-11-19 17:41:12

标签: ios xcode swift

所以我已经成功地将CoreData实现到我的Xcode项目中,并且所有内容似乎都正确地链接在一起。我目前在ViewController.swift中使用的代码是:

func runTests(){

    let appDel : AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate

    let contxt : NSManagedObjectContext = appDel.managedObjectContext!

    let en = NSEntityDescription.entityForName( "SavedData", inManagedObjectContext: contxt )

    var newItem = data( entity: en!, insertIntoManagedObjectContext: contxt )

    newItem.test = "test123"

    var error : NSError? = nil
    if !contxt.save(&error) {
        NSLog("Unresolved error \(error), \(error!.userInfo)")
    }

    NSLog("CoreData:\(newItem)")
    }

和我的knoData.swift:

import Foundation
import UIKit
import CoreData

@objc( data )
class data: NSManagedObject {
    @NSManaged var test : String
}

当应用程序仍在运行时,它将在引用为“newItem.test”时正确返回“test123”,但当我尝试再次运行应用程序并引用它时,它将返回nil直到再次设置。我救的不对吗?是不是引用了一个类?有人请帮忙。

编辑:我上面的代码没有返回任何错误。当我在没有引用knoData.xcdatamodeld中的类数据的情况下运行应用程序时,它在NSLog中返回

CoreData:<NSManagedObject: 0x79eb49d0> (entity: SavedData; id: 0x79eb6af0 <x-coredata://C40AE8E5-A846-4AC4-9A27-2FB109D6FE49/SavedData/p181> ; data: {
    test = test123; // it is only returning test123 because it was set previously, but when I run the app again and try to get the value without setting it again, it returns nil
})

但是当我在knoData.xcdatamodeld中引用类数据时,它会返回:

CoreData:

1 个答案:

答案 0 :(得分:0)

您需要从数据库中获取数据:

let fetchRequest = NSFetchRequest(entityName:"SavedData")
var error: NSError?
let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as [data]?
if let resultsArray = fetchedResults {
    if resultsArray.count > 0 {
        let newItem = resultsArray[0] as data
        println("Saved data is \(newItem.test)")
    } else {
        println("No results from fetch request.")
    }
}

我假设您的实体名称为“SavedData”,属于“数据”类。