0
私はいくつかのデフォルトデータを作成し、最初の起動時にそれをcoredataに保存しますが、作成中に何かがうまくいかず、何か分かりません。CoreDataオブジェクトの属性が次のオブジェクトの作成時に消えています
を(それが重要ならばsugarRecordを使用して)これらは創造のための機能:
デフォルトdataLayout(正常に動作します)
func createDefaultDataLayout() {
guard let db = db else { return }
do {
try db.operation { (context, save) throws -> Void in
let defaultData: TMDataLayout = try! context.create()
defaultData.id = 999
let spot1: TMData = (try! context.fetch(FetchRequest<TMData>().filtered(with: "id", equalTo: "1")).first)!
spot1.spot = 1
let spot2: TMData = (try! context.fetch(FetchRequest<TMData>().filtered(with: "id", equalTo: "6")).first)!
spot2.spot = 2
let spot3: TMData = (try! context.fetch(FetchRequest<TMData>().filtered(with: "id", equalTo: "8")).first)!
spot3.spot = 3
let spot4: TMData = (try! context.fetch(FetchRequest<TMData>().filtered(with: "id", equalTo: "19")).first)!
spot4.spot = 4
defaultData.data = [spot1, spot2, spot3, spot4]
save()
}
} catch {
print("Error creating default data layout")
}
}
デフォルトの活動、デフォルトを使用してdataLayout
func createDefaultActivities() {
guard let db = db else { return }
let defaultPredicate: NSPredicate = NSPredicate(format: "id == %@", "0")
do {
try db.operation { (context, save) throws -> Void in
let defaultDataLayout = try! context.fetch(FetchRequest<TMDataLayout>().filtered(with: defaultPredicate)).first
let defaultSettings = try! context.fetch(FetchRequest<TMSettingsLayout>().filtered(with: defaultPredicate)).first
let chosen: TMActivity = try! context.create()
chosen.id = 999
chosen.title = L10n.Activity.running
chosen.iconName = "running"
chosen.dataLayout = defaultDataLayout
chosen.settingsLayout = defaultSettings
chosen.goal = try! context.fetch(FetchRequest<TMGoal>().filtered(with: "title", equalTo: L10n.Goal.Nothing.title)).first
chosen.isPartOfWorkout = false
print(chosen)
let walking: TMActivity = try! context.create()
walking.id = 1
walking.title = L10n.Activity.walking
walking.iconName = "walking"
walking.dataLayout = defaultDataLayout
walking.settingsLayout = defaultSettings
walking.isPartOfWorkout = false
print(chosen)
save()
}
} catch {
print("Something went wrong setting up core data (dataManager)")
}
}
「選択された」2つのプリントは何か違うものを与え、オブジェクトが最初に正しいものをプリントし、dataLayoutとsettingsLayoutがセットされますが、2番目のものは消えてしまいます赤。同じ方法で目標を取得して設定すると、はのオブジェクトに残ります。
どこが間違っていますか?
ここで比較
func createGoalObjects() {
guard let db = db else { return }
do {
try db.operation { (context, save) throws -> Void in
let duration: TMGoal = try! context.create()
duration.id = 1
duration.title = L10n.Goal.Duration.title
duration.iconName = "duration"
duration.amount = 0
duration.descriptionString = L10n.Goal.Duration.amount(Int(duration.amount))
let pace: TMGoal = try! context.create()
pace.id = 2
pace.title = L10n.Goal.Pace.title
pace.iconName = "pace"
pace.amount = 0
pace.descriptionString = L10n.Goal.Pace.amount(Int(duration.amount))
let distance: TMGoal = try! context.create()
distance.id = 3
distance.title = L10n.Goal.Distance.title
distance.iconName = "distance"
distance.amount = 0
distance.descriptionString = L10n.Goal.Distance.amount(duration.amount)
let calories: TMGoal = try! context.create()
calories.id = 4
calories.title = L10n.Goal.Calories.title
calories.iconName = "calories"
calories.amount = 0
calories.descriptionString = L10n.Goal.Calories.amount(Int(duration.amount))
let nothing: TMGoal = try! context.create()
nothing.id = 5
nothing.title = L10n.Goal.Nothing.title
nothing.iconName = "nothing"
nothing.amount = 0
nothing.descriptionString = L10n.Goal.Nothing.amount
save()
}
} catch {
print("Error creating default data layout")
}
}
のための目標の作成funcが私が得る2枚のプリントされている:
<TMActivity: 0x1c40990a0> (entity: TMActivity; id: 0x1c422d2c0 <x-coredata:///TMActivity/tA820CA64-1F5A-480D-A631-0BC3E05FFC9237> ; data: {
dataLayout = "0xd000000000040002 <x-coredata://62477925-6CCB-472D-8C45-BD6731B59AA6/TMDataLayout/p1>";
goal = "0xd0000000000c0006 <x-coredata://62477925-6CCB-472D-8C45-BD6731B59AA6/TMGoal/p3>";
iconName = running;
id = 999;
isPartOfWorkout = 0;
partId = 0;
parts = (
);
settingsLayout = "0xd000000000040004 <x-coredata://62477925-6CCB-472D-8C45-BD6731B59AA6/TMSettingsLayout/p1>";
title = Hardlopen;
})
<TMActivity: 0x1c40990a0> (entity: TMActivity; id: 0x1c422d2c0 <x-coredata:///TMActivity/tA820CA64-1F5A-480D-A631-0BC3E05FFC9237> ; data: {
dataLayout = nil;
goal = "0xd0000000000c0006 <x-coredata://62477925-6CCB-472D-8C45-BD6731B59AA6/TMGoal/p3>";
iconName = running;
id = 999;
isPartOfWorkout = 0;
partId = 0;
parts = (
);
settingsLayout = nil;
title = Hardlopen;
})
それを固定している、多くの私のdataLayoutとsettingsLayout関係を設定するのを忘れてください。この場合は、あなた自身の答えを質問の答えとして記入してください。 – Manganese
@マンガン私はしようとしましたが、私はまだできません、私は2日待つ必要があると言います –