私は、スワイプがtableviewcell関数を削除するたびにコアデータ属性値に5を加算するアプリケーションを使用しています。コミットeditingStyleクラス内のコードは次のようになりhttps://i.stack.imgur.com/16YR6.png:CantはUITableViewが空の場合にCoreData属性値を取得します
if editingStyle == UITableViewCellEditingStyle.delete{
let fetchRequest: NSFetchRequest<Goal> = Goal.fetchRequest()
do {
let array_users = try context.fetch(fetchRequest)
let user = array_users[0]
var count: Int64 = user.value(forKey: "totalGold") as! Int64
count += 5
user.setValue(count, forKey: "totalGold")
let str = String(describing: user.value(forKey: "totalGold") as! Int64)
totalGold.text = str
do {
try context.save()
print("saved!")
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
} catch {
}
}
catch {
print("Error with request: \(error)")
}
let managedObject: NSManagedObject = controller.object(at: indexPath) as NSManagedObject;
context.delete(managedObject)
ad.saveContext()
}
}
その後、私はそうのように、のviewDidLoadで同じフェッチ・プロセスを使用します。
let fetchRequest: NSFetchRequest<Goal> = Goal.fetchRequest()
do {
let array_users = try context.fetch(fetchRequest)
let user = array_users[0]
let count: Int64 = user.value(forKey: "totalGold") as! Int64
user.setValue(count, forKey: "totalGold")
let str = String(describing: user.value(forKey: "totalGold") as! Int64)
totalGold.text = str
//save the context
do {
try context.save()
print("saved!")
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
} catch {
}
} catch {
print("Error with request: \(error)")
}
このコードは、のために正常に動作コアデータの設定は次のようになりますテーブルビューにテーブルビューセルがない場合を除き、すべてのケース。その後、私は何の細胞が存在しない一方でビューを再ロードしようとすると、行にフェッチしようとしている間、私は範囲エラー外のインデックスを取得:
明らかlet user = array_users[0]
、これは私がしようという事実によるものですtotalGoldの最新の値を取得するには、それを見つけることができず、theresに値がないと考えるので、私は間違ったフェッチをしています。 totalGoldの最新の属性値を正しく取得するにはどうすればよいですか?
のものを置くことができます。ビューがロードされると、totalGold属性の値がリセットされ、テキストラベルのデフォルト値のように「0」が読み込まれます。 –