我使用swift核心数据在应用程序中保存用户信息,但当它保存当前用户数据(姓名,简历,3-4张照片)时,它会挂起2-3秒,直到它保存数据。避免应用程序挂起的最好方法是什么?这是我正在使用的代码
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个好友时,保存/更新用户的所有信息/数据需要挂起一分钟。
发布于 2016-01-26 15:58:13
这就是我会怎么做。现在很明显,您不希望UI挂起,因此您将希望使用具有私有队列并发类型的托管对象上下文。有关该here的更多信息。具体地说,请看末尾的部分,其中他详细介绍了如何创建导出函数。
现在,由于您在本例中将数据保存到持久性存储,因此您可能不希望用户在保存之前的更改时到处更改内容,在本例中,您可能需要一个显示保存进度的临时屏幕。
发布于 2016-01-26 18:52:51
您(和您的应用程序)必须努力将所有照片数据保存到User实体的一个属性中。相反,重构您的数据模型:
Photo实体。User到Photo的多对多关系,而不是<代码>D10属性。<代码>H211<代码>G212顺便说一句,我会避免使用CoreData作为属性名:它太接近objectId的objectID了,这会引起混淆。
https://stackoverflow.com/questions/35008833
复制相似问题