【问题标题】:Error loading for Core data加载核心数据时出错
【发布时间】:2015-06-13 16:12:51
【问题描述】:

我尝试使用 CoreData 来持久化一些数据。数据是从 url 下载的,它是一个包含一组用户详细信息的 Json。我尝试解析 json 并将数据转换为我的 NSManagedObjectModel 子类,称为“用户”。但是,该应用程序在没有任何解释的情况下中断。谁能告诉我我的代码有什么问题?

//var friend = [User]()

func loadUpdateData(){

self.refreshControl?.beginRefreshing()

let dir = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as NSString

let url = NSURL( string: "http://192.168.0.101/index.php?method=updateData&id=1" )

var request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 10)
request.HTTPMethod = "POST"
request.HTTPBody = checkList!

var updateQueue = NSOperationQueue()
NSURLConnection.sendAsynchronousRequest(request, queue: updateQueue, completionHandler: { (response, recievedData, error) -> Void in

    if error == nil && (recievedData != nil) {

        let dataString = NSString(data: recievedData, encoding: NSUTF8StringEncoding)
        let readableData = dataString?.dataUsingEncoding(NSUTF8StringEncoding)
        var updatedFriendList = NSJSONSerialization.JSONObjectWithData(readableData!, options: NSJSONReadingOptions.MutableContainers, error: nil)! as [NSDictionary]

        dispatch_async(dispatch_get_main_queue(), {

            for (var index=0; index<updatedFriendList.count; index++) {
                User.insertNewUser(self.objectContext!, newUserDict: updatedFriendList[index])   **//it seems app crashes at this line is being executed.**
            }
            self.objectContext?.save(nil)

            self.refreshControl?.endRefreshing()
        })

    }else{
        dispatch_async(dispatch_get_main_queue(), {
            let _ = self.refreshControl?.endRefreshing()
        })
    }
})    
}

对于“用户”类:

class User: NSManagedObject {

@NSManaged var userName: String
@NSManaged var userNickName: String
@NSManaged var sex: NSNumber
@NSManaged var birth: NSDate
@NSManaged var userID: NSNumber
@NSManaged var userAvatar: NSData
@NSManaged var numOfTarget: NSNumber
@NSManaged var latestUpdateTime: NSDate


class func insertNewUser(moc: NSManagedObjectContext, newUserDict: NSDictionary) {

    let user = NSEntityDescription.insertNewObjectForEntityForName("User", inManagedObjectContext: moc) as User

    user.userID = newUserDict.valueForKey("userID") as NSNumber
    user.userName = newUserDict.valueForKey("userName") as String
    user.latestUpdateTime = newUserDict.valueForKey("latestUpdateTime") as NSDate
    user.numOfTarget = newUserDict.valueForKey("numOfTarget") as NSNumber
    user.userNickName = newUserDict.valueForKey("userNickName") as String
    user.userAvatar = newUserDict.valueForKey("userAvatar") as NSData
    user.sex = newUserDict.valueForKey("sex") as NSNumber
    user.birth = newUserDict.valueForKey("birth") as NSDate

    moc.save(nil)
}

--更新错误快照-- libsystem_kernel.dylib`__pthread_kill: 0x19317b268: movz x16, #328 0x19317b26c: 服务端 #128 0x19317b270: b.cc 0x19317b288; __pthread_kill + 32 0x19317b274:stp fp,lr,[sp,#-16]! 0x19317b278: mov fp, sp 0x19317b27c:bl 0x19316259c; cerror_nocancel 0x19317b280: 移动 sp, fp 0x19317b284: ldp fp, lr, [sp], #16

0x19317b288:返回

2015-04-09 22:47:27.488 Incentive[355:78244] -[Incentive.User setNumOfTarget:]:无法识别的选择器发送到实例 0x1702c1c70 2015-04-09 22:47:27.492 Incentive[355:78244] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Incentive.User setNumOfTarget:]:无法识别的选择器发送到实例 0x1702c1c70” * 首先抛出调用栈: (0x18229e59c 0x1929f40e4 0x1822a5664 0x1822a2418 0x1821a6b6c 0x1000a2678 0x10009b79c 0x10009c294 0x181c86f34 0x183157508 0x1830a8c94 0x18309861c 0x18315a26c 0x1004e0df0 0x1004eb854 0x1004e4120 0x1004ed75c 0x1004eef18 0x1932152e4 0x193214fa8) libc++abi.dylib:以 NSException 类型的未捕获异常终止 (lldb)

【问题讨论】:

  • 嗯,在调试器中运行时它应该会在某个地方中断,所以这是你的第一条线索。
  • 你能定义“应用中断”吗?断点?症状?
  • @JohanKool,断点不会停在特定的行。我已经更新了应用程序中断时的声明。请参阅上面的更新声明。此外,我尝试逐行执行代码,似乎错误发生在以下行: for (var index=0; index//似乎应用程序在这一行崩溃了。 }

标签: ios swift core-data


【解决方案1】:

这是解释:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Incentive.User setNumOfTarget:]: unrecognized selector sent to instance 0x1702c1c70' 

这意味着 User 类不知道 setNumOfTarget:。检查您的 CoreData 模型是否确实正确定义了它。

【讨论】:

  • 实际上我的“用户”类没有名为“setNumOfTarget”的属性。它确实有一个名为“numOfTarget”的属性。他们有关系吗?如果有,他们是什么关系?
  • 你能解释一下CoreData模型应该如何定义一个类吗?谢谢!
  • 我明白了,你是对的。真的是因为我的粗心!我在我的模型中命名错误...谢谢。
猜你喜欢
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多