2016-01-26 10 views
1

Я использую данные быстрого ввода для сохранения информации пользователя в приложении, но когда он сохраняет текущие данные пользователей (имя, био, 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 друзей, он принимает виснет на минуту, чтобы сохранить/обновить всю информацию/данные пользователей.

ответ

0

Вот как я это сделаю. Теперь, очевидно, вы не хотите, чтобы пользовательский интерфейс зависал, поэтому вы захотите использовать контекст управляемого объекта, который имеет тип параллелизма с частными очередями. Подробнее об этом here. В частности, посмотрите на часть в конце, где он подробно описывает, как создать функцию экспорта.

Теперь, поскольку вы сохраняете данные в постоянном хранилище в этом случае, вам может не потребоваться, чтобы пользователь переключался на меняющиеся вещи, пока их предыдущие изменения сохраняются, в этом случае вам может потребоваться промежуточный экран, показывающий ход сохранения.

+0

да, что можно сделать, но я не хочу, чтобы пользователи подождали минуту. Это то, что я пытаюсь сделать. – user528432

0

Вам (и вашему приложению) приходится много работать, чтобы сохранить все данные фотографии в один атрибут вашего объекта User. Вместо этого перестройте свою модель данных:

  1. Создайте отдельный объект Photo для фотографий.
  2. Не храните данные фотоизображения в CoreData - просто сохраните строку с URL-адресом.
  3. Соотношение предпочтений: User до Photo, а не photos.

Кстати, я бы не использовать objectId в качестве имени атрибута: это так близко к CoreData-х objectID это вызовет путаницу.

+0

Это не очень помогает, должен ли я перейти на sqlite? – user528432

+0

@ user528432 Если все еще занимает 2-3 секунды, я сомневаюсь, что проблема в сохранении CoreData. Вы пробовали профилировать инструменты, чтобы понять, что у вас есть время? – pbasdf

Смежные вопросы