こんにちは、これは可能かどうか疑問に思っています。カウンタの変数がボタンを押すたびに1ずつインクリメントされる単純なカウンタアプリケーションがあります。ユーザーがコアデータを使用してアプリケーションを終了したときにカウンタを保存することは可能ですか?私はNSUserdefaultsはここで働いてます知っているが、イムは、コアデータを探索し、それがこのコアデータを使用して素早く変化する整数を保存する
class ViewController: UIViewController {
var counter = Int()
@IBOutlet var label: UILabel!
@IBAction func button(sender: AnyObject) {
counter += 1
label.text = "\(counter)"
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
}
NSManagedObjectのサブクラスエラー
class IntegerEntity: NSManagedObject {
convenience init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?, value: Int) {
self.init(entity: entity, insertIntoManagedObjectContext: context)
self.value
// ERROR value of type IntegerEntity has no member value
}
}
ViewController.swiftエラー
import UIKit
import CoreData
class ViewController: UIViewController {
var counter = Int()
@IBOutlet var label: UILabel!
@IBAction func button(sender: AnyObject) {
counter += 1
label.text = "\(counter)"
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
let dataContext: NSManagedObjectContext! = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext
var integerEntity: IntegerEntity!
if dataContext != nil {
let entity = NSEntityDescription.entityForName("IntegerEntity", inManagedObjectContext: dataContext)
let request = NSFetchRequest()
request.entity = entity
let integer = try? dataContext.executeFetchRequest(request)
if integer != nil && !integer!.isEmpty {
(integer?.first! as! IntegerEntity).value = counter
// ERROR value of type IntegerEntity has no member value
} else {
let newInt = IntegerEntity(entity: entity, insertIntoManagedObjectContext: context, value: counter)
// ERROR Use of unresolved identifier context
dataContext.saveData()
}
}
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
let dataContext: NSManagedObjectContext! = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext
var integerEntity: IntegerEntity!
if dataContext != nil {
let entity = NSEntityDescription.entityForName("IntegerEntity", inManagedObjectContext: dataContext)
let request = NSFetchRequest()
request.entity = entity
let integer = try? dataContext.executeFetchRequest(request)
if integer != nil && !integer!.isEmpty {
counter = (integer!.first! as! IntegerEntity).value
// ERROR value of type IntegerEntity has no member value
} else {
counter = 0
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
extension NSManagedObjectContext {
func saveData() -> Bool {
do {
try self.save()
return true
} catch let error as NSError {
print(error)
return false;
}
}
}
はい、もちろんです。しかし、それはタスクにとって非常に悪いマッチです。それは店の向こうにミルクの瓶のために行くために747を起動するようなものです。コアデータは非常に強力ですが、急な学習曲線とかなりのオーバーヘッドがあります。それを使用して単一の整数を格納するのは愚かです。 –
'do-catch'を使い、エラーを適切に処理します。成功すると、オプションでない配列が保証されます。また、 'NSManagedObjectContext'オブジェクトも非オプションであると考えられます。そして、 'AppDelegate'はどのように' nil'になることができますか?アプリケーションデリゲートがない場合、アプリケーションはまったく起動しません。 – vadian