所以在我的应用程序中它是一个多视图控制器教程。通过在角色扮演游戏中构建角色来走动一个人。我得到了创建记录的第一点,我尝试使用我工作的其他项目来保存数据并调用数据。现在,当我处理CoreData时,我只处理了字符串。我不确定调用数据时有多大不同。
首先,用户确实插入了字符编号。然后他们选择他们的模式,然后他们的能力得分,然后他们的比赛等等。因此,当用户使用字符编号到达ViewController时,会为他们预先生成一个字符编号,如果需要,他们可以更改它。他们点击继续,然后创造了记录。当他们到达ModeViewController时,他们有2个按钮,核心或标准。当他们选择按钮时,它应该根据字符编号调用记录,然后用所选模式更新记录。 这是ModeViewController的代码:
// Passed in variables from other ViewControllers
var characterNumber = 0
let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
@IBAction func standardBtn(_ sender: Any)
{
let pred = NSPredicate(format: "(name = %@)", "characterNumber")
print("Character Numeber: ", characterNumber)
let fetchRequest = NSFetchRequest<Characters>(entityName: "Characters")
fetchRequest.predicate = pred
do
{
let fetchedEntities = try self.managedObjectContext.fetch(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) as! [Characters]
// Character Information
fetchedEntities.first?.mode = "standard"
performSegue(withIdentifier: "mode", sender: nil)
}
catch
{
// Do something in response to error condition
let alertController = UIAlertController(title: "Did Not Save", message:
"Your information did not save. \nIf this problem keeps occuring, contact the developer", preferredStyle: UIAlertControllerStyle.alert)
alertController.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default,handler: nil))
self.present(alertController, animated: true, completion: nil)
}
do
{
try self.managedObjectContext.save()
}
catch
{
// Do something in response to error condition
}
}
在CoreData中 实体:角色 属性:characternumber(int16)
现在核心的另一个按钮具有相同的确切代码,除了不保存标准,它保存核心。
这是我应该根据字符数据调用数据的代码:
// Passed in variables from other ViewControllers
var characterNumber = 0
// Other variables
let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var mode: [NSManagedObject] = []
var selectededMode = ""
let entityDescription = NSEntityDescription.entity(forEntityName: "Characters", in: managedObjectContext)
let request: NSFetchRequest<Characters> = Characters.fetchRequest()
request.entity = entityDescription
// Supposed to call the record based on characternNumber
let pred = NSPredicate(format: "(characternumber = %@)", "characterNumber")
request.predicate = pred
do
{
var results = try managedObjectContext.fetch(request as! NSFetchRequest<NSFetchRequestResult>)
print("results = ", results)
if results.count > 0
{
let match = results[0] as! NSManagedObject
print("match= ", match)
selectededMode = (match.value(forKey: "mode") as? String)!
print("Mode: ", selectededMode)
}
else
{
selectededMode = "empty"
print("Mode: ", selectededMode)
}
现在我认为我的主要问题是数据没有将我选择的模式保存到coredata中。我再次处理字符串,现在冒险进入整数。
创建实际记录:
@IBAction func savingSocNum(_ sender: Any)
{
if societyNumberTxt.text == ""
{
let alert = UIAlertController(title: "No Society Number", message: "You have not entered your Society Nmber.\nPlease enter your Society Number to advance", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
else
{
let entity = NSEntityDescription.entity(forEntityName: "Characters", in: managedObjectContext)!
let entity1 = NSEntityDescription.entity(forEntityName: "Societynumber", in: managedObjectContext)!
let cnumber = NSManagedObject(entity: entity, insertInto: managedObjectContext)
let snumber = NSManagedObject(entity: entity1, insertInto: managedObjectContext)
let newCharNum = Int(characterNumberTxt.text!)!
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext = appDelegate.persistentContainer.viewContext
//2
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Societynumber")
do {
societyNum = try managedContext.fetch(fetchRequest)
// Fetchs data from Characters
let entityDescription = NSEntityDescription.entity(forEntityName: "Societynumber", in: managedObjectContext)
let request: NSFetchRequest<Societynumber> = Societynumber.fetchRequest()
request.entity = entityDescription
var results = try managedObjectContext.fetch(request as! NSFetchRequest<NSFetchRequestResult>)
if societyNum.isEmpty
{
print("empty")
}
else
{
print("not empty")
}
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
snumber.setValue(societyNumberTxt.text, forKeyPath: "societynumber")
cnumber.setValue(newCharNum, forKey: "characternumber")
do
{
try managedObjectContext.save()
characters.append(cnumber)
}
catch let error as NSError
{
print("Could not save. \(error), \(error.userInfo)")
}
performSegue(withIdentifier: "continue", sender: nil)
}
}