2015-04-22 5 views
0

Я пытаюсь архивировать массив объектов фото() с некоторыми членами в нем. Учитывая, что протокол NsCoding был реализован правильно, будет ли следующий код работать, чтобы успешно архивировать (сохранять) данные из массива и анархировать его снова?Архивирование и unArchiving пользовательских объектов с помощью NSCoder

var dir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) [0] as String 
var dir2 = "/photo.plist" 

//This method is suppose to archive objects if the array is not empty. 

func archivePhoto () { 
    let archiveName = self.dir + self.dir2 
    if (photos.count > 0){ 
     for photo in photos { 
      NSKeyedArchiver.archiveRootObject(photo, toFile: archiveName) 
     } 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Register cell classes 
    self.collectionView!.registerClass(PhotosCollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier) 
    // Do any additional setup after loading the view. 
    archivePhoto() 
    let archiveName = self.dir + self.dir2 
    if let myArray = NSKeyedUnarchiver.unarchiveObjectWithFile(archiveName) as Array<Photo>? { 
     photos = myArray 
     self.collectionView?.reloadData() 
    } 
} 
+1

«будет ли следующий код работать, чтобы успешно архивировать (сохранять) данные из массива и анархировать его снова? На данный момент это не так». Если это не так, то, очевидно, нет, это не сработает. Что за вопрос? – matt

+0

@matt Извините за замешательство, я отредактирую свой вопрос. Но не могли бы вы помочь мне указать на мою ошибку? –

ответ

1

Ну, просто посмотрите на свой код, если вы хотите знать, что с ним не так.

  • Когда вы архив, архивировать каждую фотографию по отдельности:

    NSKeyedArchiver.archiveRootObject(photo, toFile: archiveName) 
    

    Кроме того, можно использовать один и тот же archiveName каждый раз через эту петлю, так что вы в конечном итоге с в архив? Одна фотография.

  • Но когда вы разархивировать, вы, видимо, ожидать, чтобы получить массив фотографий:

    NSKeyedUnarchiver.unarchiveObjectWithFile(archiveName) as Array<Photo> 
    

    Вы сделать не получить его, потому что это не то, что вы архивируются в первое место, не так ли? Если вы хотите архивировать массив фотографий, запишите архив фотографий - не одна фотография снова и снова.

Я не говорю, что фиксируя это решит все - вы не показывают какой-либо из другого соответствующего кода, например, что photos, что такое фото, как она кодирует/декодирует себя и т.д. , поэтому у меня нет оснований полагать, что любой из них работает либо, но код, который вы, , делает, будет, очевидно, никогда не работать, поскольку он не имеет смысла.

+0

спасибо большое :-) У меня все еще есть некоторые проблемы по моему коду, так как мое приложение не загружает объекты, как только я уйду из него и вернусь. Спасибо, я исправил свою функцию архива –

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