我知道這個問題已被詢問並回答了很多次,但無論我嘗試多少種解決方案,我都無法使其工作。iOS9 - 將字符串保存到核心數據
因此,我的應用程序將存儲有關當前登錄用戶的用戶信息。我想將它作爲簡單用戶對象存儲在覈心數據中。
我已經創建了下面的屬性叫UserData
一個新的實體:
name
username
profilePicture
當用戶登錄時,這些值是從服務器獲取,並應在覈心數據存儲在本地。
我已經產生NSManagedObject
子對我的實體並結束了與以下兩類
// UserData.swift
// Created by xxx on 2015-10-14.
import Foundation
import CoreData
class UserData: NSManagedObject {
// Insert code here to add functionality to your managed object subclass
}
和
// UserData+CoreDataProperties.swift
// Created by xxx on 2015-10-14.
// Choose "Create NSManagedObject Subclass…" from the Core Data editor menu
// to delete and recreate this implementation file for your updated model.
import Foundation
import CoreData
extension UserData {
@NSManaged var profilePicture: NSData?
@NSManaged var username: String?
@NSManaged var name: String?
}
有兩個函數調用時的用戶名應保存或者從核心獲得數據
func saveUsername(username: String) {
let appDelegate =
UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let entity = NSEntityDescription.entityForName("UserData",
inManagedObjectContext:managedContext)
let user = UserData(entity: entity!,
insertIntoManagedObjectContext: managedContext)
user.setValue(username, forKey: "name")
do {
try managedContext.save()
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
}
func getUsername() -> String{
let appDelegate =
UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "UserData")
var users = [UserData]()
do {
let results =
try managedContext.executeFetchRequest(fetchRequest)
users = results as! [UserData]
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
return users[0].name!
}
這是我第一次嘗試使用核心數據,似乎我錯過了一些東西。任何人都可以看到這裏可能是錯的嗎?我不確定數據是否正確保存,並且fetchRequest
中的results
是空數組。
我只是用你的代碼,它工作正常。你從哪裏調用'saveUsername'和'getUsername'? – joern