Swift 应用程序在保存核心数据时挂起
我正在使用swift core数据在应用程序中保存用户信息,但在保存当前用户数据(姓名、简历、3-4张照片)时,它会挂起2-3秒,直到保存数据为止。避免应用程序挂起的最佳方法是什么?这是我正在使用的代码Swift 应用程序在保存核心数据时挂起,swift,core-data,Swift,Core Data,我正在使用swift core数据在应用程序中保存用户信息,但在保存当前用户数据(姓名、简历、3-4张照片)时,它会挂起2-3秒,直到保存数据为止。避免应用程序挂起的最佳方法是什么?这是我正在使用的代码 for photo in photos { let data = NSData(contentsOfURL: NSURL(string: photo.url!)!) let newimg = UIImage(data: data!)
for photo in photos {
let data = NSData(contentsOfURL: NSURL(string: photo.url!)!)
let newimg = UIImage(data: data!)
newusersImages.addObject(newimg!)
}
mayBeUser.name = currentuser!.objectForKey("name") as! String
let arrayData = NSKeyedArchiver.archivedDataWithRootObject(newusersImages)
let locationData = NSKeyedArchiver.archivedDataWithRootObject(currentuser!.objectForKey("location")!)
mayBeUser.photos = arrayData
mayBeUser.location = locationData
mayBeUser.about = currentuser!.objectForKey("about") as! String
mayBeUser.setValue(currentuser!.objectForKey("age") as! Int, forKey: "age")
mayBeUser.objectId = currentuser!.objectId!
mayBeUser.lastSeen = currentuser!.objectForKey("lastSeen") as! NSDate
try! context.save()
print("Current User Updated")
当用户有10-15个朋友时,需要挂起一分钟来保存/更新用户的所有信息/数据。以下是我的做法。现在,显然您不希望UI挂起,因此您需要使用具有私有队列并发类型的托管对象上下文。更多信息。具体来说,请看结尾部分,他详细介绍了如何创建导出函数
现在,由于在本例中您正在将数据保存到持久性存储中,您可能不希望用户在保存以前的更改时四处更改内容,在本例中,您可能需要一个显示保存进度的临时屏幕 我会这样做的。现在,显然您不希望UI挂起,因此您需要使用具有私有队列并发类型的托管对象上下文。更多信息。具体来说,请看结尾部分,他详细介绍了如何创建导出函数 现在,由于在本例中您正在将数据保存到持久性存储中,您可能不希望用户在保存以前的更改时四处更改内容,在本例中,您可能需要一个显示保存进度的临时屏幕 您(和您的应用程序)必须努力将所有照片数据保存到您的
用户
实体的一个属性中。相反,请重新构建数据模型:
Photo
实体用户
到照片
的多对多关系,而不是照片
属性objectId
作为属性名称:它与CoreData的objectId
非常接近,这会造成混淆。您(和您的应用程序)必须努力将所有照片数据保存到用户的实体的一个属性中。相反,请重新构建数据模型:
为照片创建一个单独的Photo
实体
不要将照片图像数据存储在CoreData中,只需存储带有URL的字符串即可
添加从用户
到照片
的多对多关系,而不是照片
属性
顺便说一句,我会避免使用objectId
作为属性名称:它与CoreData的objectId
非常接近,这会造成混淆。可以这样做,但我不希望用户等待一分钟。这就是我想做的。是的,这是可以做到的,但我不希望用户等待一分钟。这正是我想做的。实际上,这没有多大帮助,我应该改为使用sqlite吗?@user528432如果还需要2-3秒,我怀疑问题出在CoreData保存中。您是否尝试过在instruments中评测以查看需要花费的时间?实际上,这没有多大帮助,我是否应该改为使用sqlite?@user528432如果仍然需要2-3秒,我怀疑问题是否出在CoreData保存中。你有没有试过用仪器来分析,看看是什么花了时间?