向核心数据中输入plist数据
Entering plist data to core data
我目前有一个包含 27 个成就数据的 plist 文件,我正在尝试将其输入到核心数据实体中,如下所示
func createAchievements() {
let A:Achievement = NSEntityDescription.insertNewObject(forEntityName: "Achievement", into: CoreDatabaseContoller.getContext()) as! Achievement
let filePath = Bundle.main.path(forResource: "Achievement", ofType: "plist")
let Items = NSArray(contentsOfFile: filePath!) as! [[String:AnyObject]]
for item in Items {
A.theName = item["Name"] as! String
A.theDescription = item["Description"] as! String
A.theImage = item["Image"] as! String
A.aAmount = item["Amount"] as! NSNumber
A.aNeededAmount = item["NeededAmount"] as! NSNumber //DOESN'T WORK IT ONLY SHOWS OR PUTS IN THE LAST ONE.
A.aStage = item["Stage"] as! NSNumber
A.aReward = item["Reward"] as! NSNumber
A.aHasBeenAchieved = item["HasBeenAchieved"] as! NSNumber
A.theSearchName = item["SearchName"] as! String
CoreDatabaseContoller.saveContext()
}
}
但是当我加载游戏和显示成就的游戏的成就菜单部分时,所有应该由核心数据填充的图像和文本都不存在并且图像是红色 X,除了最后一个成就菜单中的成就似乎工作正常,如下图所示
我最初是通过一个开关系统输入成就数据的,该系统在我的代码中看起来很糟糕,如下所示,但它没有问题。但是现在出于某种原因,当我尝试将它从 plist 输入到核心数据时,它似乎不起作用
func giveDataForAchievements() {
if achievementsGenerated == false {
for count in 1...24 {
var aName = "None"
var aDesc = "None"
var aImage = "locked"
var aAmount:NSNumber = 0
var aNeededAmount:NSNumber = 1
var aStage:NSNumber = 0
var aReward:NSNumber = 0
var aHasbeenAchieved:NSNumber = 0
var aSearchName = ""
switch count {
case 1:
aName = "DAILY"
aDesc = "Daily Achievement"
aImage = "locked"
aAmount = 0
aNeededAmount = 1
aStage = 0
aReward = 350
aHasbeenAchieved = 0
aSearchName = "Ach0"
case 2:
aName = "DAILY"
aDesc = "Daily Achievement"
aImage = "locked"
aAmount = 0
aNeededAmount = 1
aStage = 0
aReward = 350
aHasbeenAchieved = 0
aSearchName = "Ach1"
case 3:
aName = "DAILY"
aDesc = "Daily Achievement"
aImage = "locked"
aAmount = 0
aNeededAmount = 1
aStage = 0
aReward = 350
aHasbeenAchieved = 0
aSearchName = "Ach2"
case 4:
aName = "ROOKIE"
aDesc = "Finish the tutorial level"
aImage = "locked"
aAmount = 0
aNeededAmount = 1
aStage = 2
aReward = 350
aHasbeenAchieved = 0
aSearchName = "Ach3"
createAchievements(aName: aName, Des: aDesc, Image: aImage, Amount: aAmount, Needed: aNeededAmount, Stage: aStage, Reward: aReward, BeenAchieved: aHasbeenAchieved, SearchName: aSearchName)
// all the way to 27
我不知道如何解决这个问题。谁能告诉我我做错了什么?
您正在多次更新同一个托管对象。移动行:
let A:Achievement = NSEntityDescription.insertNewObject(forEntityName: "Achievement", into: CoreDatabaseContoller.getContext()) as! Achievement
进入for循环。然后它将为每个项目创建一个新对象。
我目前有一个包含 27 个成就数据的 plist 文件,我正在尝试将其输入到核心数据实体中,如下所示
func createAchievements() {
let A:Achievement = NSEntityDescription.insertNewObject(forEntityName: "Achievement", into: CoreDatabaseContoller.getContext()) as! Achievement
let filePath = Bundle.main.path(forResource: "Achievement", ofType: "plist")
let Items = NSArray(contentsOfFile: filePath!) as! [[String:AnyObject]]
for item in Items {
A.theName = item["Name"] as! String
A.theDescription = item["Description"] as! String
A.theImage = item["Image"] as! String
A.aAmount = item["Amount"] as! NSNumber
A.aNeededAmount = item["NeededAmount"] as! NSNumber //DOESN'T WORK IT ONLY SHOWS OR PUTS IN THE LAST ONE.
A.aStage = item["Stage"] as! NSNumber
A.aReward = item["Reward"] as! NSNumber
A.aHasBeenAchieved = item["HasBeenAchieved"] as! NSNumber
A.theSearchName = item["SearchName"] as! String
CoreDatabaseContoller.saveContext()
}
}
但是当我加载游戏和显示成就的游戏的成就菜单部分时,所有应该由核心数据填充的图像和文本都不存在并且图像是红色 X,除了最后一个成就菜单中的成就似乎工作正常,如下图所示
我最初是通过一个开关系统输入成就数据的,该系统在我的代码中看起来很糟糕,如下所示,但它没有问题。但是现在出于某种原因,当我尝试将它从 plist 输入到核心数据时,它似乎不起作用
func giveDataForAchievements() {
if achievementsGenerated == false {
for count in 1...24 {
var aName = "None"
var aDesc = "None"
var aImage = "locked"
var aAmount:NSNumber = 0
var aNeededAmount:NSNumber = 1
var aStage:NSNumber = 0
var aReward:NSNumber = 0
var aHasbeenAchieved:NSNumber = 0
var aSearchName = ""
switch count {
case 1:
aName = "DAILY"
aDesc = "Daily Achievement"
aImage = "locked"
aAmount = 0
aNeededAmount = 1
aStage = 0
aReward = 350
aHasbeenAchieved = 0
aSearchName = "Ach0"
case 2:
aName = "DAILY"
aDesc = "Daily Achievement"
aImage = "locked"
aAmount = 0
aNeededAmount = 1
aStage = 0
aReward = 350
aHasbeenAchieved = 0
aSearchName = "Ach1"
case 3:
aName = "DAILY"
aDesc = "Daily Achievement"
aImage = "locked"
aAmount = 0
aNeededAmount = 1
aStage = 0
aReward = 350
aHasbeenAchieved = 0
aSearchName = "Ach2"
case 4:
aName = "ROOKIE"
aDesc = "Finish the tutorial level"
aImage = "locked"
aAmount = 0
aNeededAmount = 1
aStage = 2
aReward = 350
aHasbeenAchieved = 0
aSearchName = "Ach3"
createAchievements(aName: aName, Des: aDesc, Image: aImage, Amount: aAmount, Needed: aNeededAmount, Stage: aStage, Reward: aReward, BeenAchieved: aHasbeenAchieved, SearchName: aSearchName)
// all the way to 27
我不知道如何解决这个问题。谁能告诉我我做错了什么?
您正在多次更新同一个托管对象。移动行:
let A:Achievement = NSEntityDescription.insertNewObject(forEntityName: "Achievement", into: CoreDatabaseContoller.getContext()) as! Achievement
进入for循环。然后它将为每个项目创建一个新对象。