Swift Core Data Quirk

时间:2015-06-09 22:01:18

标签: swift core-data

任何人都可以帮我弄清楚为什么这段代码会如此表现......

首次打开应用程序时,会创建一个“用户”(如果它还不存在,这不是第一次),然后用户将与他/她的高尔夫“俱乐部”一起保存。我得到用户保存的确认以及控制台中保存的球杆。但是,当我关闭应用程序并重新打开它时,用户被取出但俱乐部却没有。我在这里错过了什么?如果您需要/想要查看此代码之外的任何屏幕截图,请告诉我......

//MARK: Core Data Variables
var user : User!
var userClubs = NSMutableSet()
var currentRound : Round!
var managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext!

func prepareUser() {
    let fetchRequest = NSFetchRequest(entityName: "User")
    let sortDescriptor = NSSortDescriptor(key: "createdTime", ascending: true)
    fetchRequest.sortDescriptors = [sortDescriptor]

    if let fetchResults = self.managedObjectContext.executeFetchRequest(fetchRequest, error: nil) as? [User] {
        if fetchResults.count > 0 {
            self.user = fetchResults[0]
            println("First user: \(self.user!.firstName) \(self.user!.lastName)")

            let fetchRequestClubs = NSFetchRequest(entityName: "Club")
            if let fetchResults2 = self.managedObjectContext.executeFetchRequest(fetchRequestClubs, error: nil) as? [Club] {
                if fetchResults2.count > 0 {
                    println("test: \(fetchResults2[0].type)")
                }
            }
        } else {
            println("No user yet")
            var newUser : User = NSEntityDescription.insertNewObjectForEntityForName("User", inManagedObjectContext: self.managedObjectContext) as! User

            newUser.createdTime = NSDate()

            managedObjectContext.save(nil)

            var i = 0
            println("before array: clubsArray is \(clubsArray.count) clubs long")
            var clubs = NSMutableSet.mutableSetValueForKey("clubs")

            for newClub in clubsArray {
                var club : Club = NSEntityDescription.insertNewObjectForEntityForName("Club", inManagedObjectContext: self.managedObjectContext) as! Club
                club.type = clubsArray[i].type as String
                club.estimatedMinYardage = clubsArray[i].minDistance as Int
                club.estimatedMaxYardage = clubsArray[i].maxDistance as Int
                club.lowerBound = clubsArray[i].lowerBound as Int
                club.upperBound = clubsArray[i].upperBound as Int
                //userClubs.addObject(club)
                managedObjectContext.save(nil)

                //club.setValue(newUser, forKey: "user")
                println("\(club.type)")
                i++
            }

            //user.setValue(userClubs, forKey: "clubs")
            prepareUser()
        }
    }
}

这是第一次运行的控制台输出:

  • 还没有用户
  • 阵容之前的
  • :clubsArray是17个俱乐部
  • 推杆
  • LW
  • SW
  • PW
  • 9i
  • 8i
  • 7i
  • 6i
  • 5i
  • 5W ...... [其他俱乐部]
  • 第一位用户:您的姓名
  • 测试:7i

在关闭并重新打开应用程序后的第二次运行中:

  • 第一位用户:您的姓名

1 个答案:

答案 0 :(得分:0)

血腥的地狱。我试图将Club类的17个实例中的1个设置为小于数据模型中允许的最小值的值。如果其他人有类似问题,请检查您的最小/最大和默认值以及@ Tom-Harrington在原始问题的评论中建议的内容。 Dunno,如果Apple可以在未来版本的XCode中对此类事情发出某种警告。