2014-11-02 67 views
2

問題檢索核心數據與SWIFT

我是新的iOS開發,並已與核心數據掙扎。我正嘗試使用開關創建設置頁面。我需要記住這個開關是打開還是關閉。我創建了一個核心數據應用程序,並設法弄清楚如何將交換機的值保存到屬性中。下面的代碼是這樣做的,我只是無法弄清楚如何將開關的保存值重新打開或關閉。我將如何做到這一點?謝謝!核心數據

Coredata

代碼

圖片:

import UIKit 
import CoreData 
class preferencesStuff: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 

    var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate) 
    var context:NSManagedObjectContext = appDel.managedObjectContext! 

    var request = NSFetchRequest(entityName: "Settings") 
    request.returnsObjectsAsFaults = false; 
    var results:NSArray = context.executeFetchRequest(request, error: nil)! 

    if(results.count > 0){ 
     if results[results.count-1] as NSObject == 1 { 
      println("ON") 
     } 


    }else{ 
     println("NO RESULTS") 
    } 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
@IBOutlet weak var fractSwitchValue: UISwitch! 

@IBAction func fractSwitch(sender: AnyObject) { 
    if fractSwitchValue.on == true { 
     var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate) 
     var context:NSManagedObjectContext = appDel.managedObjectContext! 

     var newSetting = NSEntityDescription.insertNewObjectForEntityForName("Settings", inManagedObjectContext: context) as NSManagedObject 
     newSetting.setValue(true, forKey: "fractionOnOff") 

     context.save(nil) 
     //println(newSetting) 


    } 
    else { 
     var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate) 
     var context:NSManagedObjectContext = appDel.managedObjectContext! 

     var newSetting = NSEntityDescription.insertNewObjectForEntityForName("Settings", inManagedObjectContext: context) as NSManagedObject 
     newSetting.setValue(false, forKey: "fractionOnOff") 

     context.save(nil) 
     //println(newSetting) 

    } 
} 

}

回答

2

我只是做與CoreData你的榜樣檢索。我碰巧存儲了一個NSString而不是一個Bool。它沒有優化,但它應該讓你去。

import UIKit 
import CoreData 

class ViewController: UIViewController { 

    var state: NSString = "" 

    @IBOutlet weak var fractSwitchValue: UISwitch! 

    @IBAction func fractSwitch(sender: AnyObject) { 
     if fractSwitchValue.on == true { 
      state = "On" 
      save(state) 
     } 
     else { 
      state = "Off" 
      save(state) 
     } 
    } 

    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 

     var appDel = UIApplication.sharedApplication().delegate as AppDelegate 
     var context = appDel.managedObjectContext! 
     var request = NSFetchRequest(entityName: "Settings") 
     var error: NSError? 
     var results = context.executeFetchRequest(request, error: &error) as [NSManagedObject]? 

     if let fetchedResults = results { 
      state = fetchedResults[fetchedResults.count - 1].valueForKey("fractionOnOff") as String! 
     } else { 
      println("Could not fetch \(error), \(error!.userInfo)") 
     } 

     if state == "On" { 
      fractSwitchValue.setOn(true, animated: true) 
     } else { 
      fractSwitchValue.setOn(false, animated: true) 
     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    func save(string: NSString) { 
     let appDel = UIApplication.sharedApplication().delegate as AppDelegate 
     let context = appDel.managedObjectContext! 
     let entity = NSEntityDescription.entityForName("Settings", inManagedObjectContext: context) 
     let setting = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: context) 
     setting.setValue(string, forKey: "fractionOnOff") 
     println(string) 
     var error: NSError? 
     if !context.save(&error) { 
      println("Could not save \(error), \(error?.userInfo)") 
     } 
    } 
} 
+0

解決了這個問題,經過一番小小的調整,讓我重新獲得價值。非常感謝! – CarveDrone 2014-11-03 04:12:26

2

我會用NSUserDefaults這種情況。存儲用戶首選項時,使用Core Data比Core Data容易得多。例如,您可以使用

NSUserDefaults.standardUserDefaults().setBool(value, forKey: "fractionPreference") 

存儲屬性和使用

let value = NSUserDefaults.standardUserDefaults().boolForKey("fractionPreference") 
+0

我第二個議案。避免核心數據,並使用NSUserDefaults或步入完整的NSCoding。 – 2014-11-02 23:51:13

+0

確保在嘗試使用它之前有條件地打開「值」。 – Abizern 2014-11-03 00:24:06

+0

@Abizern你是什麼意思'有條件地解開' – DeveloperACE 2014-11-14 13:46:26