В моем контроллере данных у меня есть объекты книги, и каждый объект содержит следующие свойства (среди прочих):
novel.title = @"Book One";
novel.imageArray = [[NSMutableArray alloc] initWithObjects: [UIImage imageNamed: @"book1image1"], nil];
В приложении пользователи могут добавить изображение книги, используя UIImagePickerController, например:
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(nonnull NSDictionary<NSString *,id> *)info {
[picker dismissViewControllerAnimated:YES completion:nil];
_addedImage = [info objectForKey:UIImagePickerControllerOriginalImage];
_addedImage = [self scaleImage:_addedImage toSize:CGSizeMake(120, 168)];
[_book.imageArray addObject:_addedImage];
NSString *stringPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:_book.imageArrayID];//folder name
NSError *error = nil;
if (![[NSFileManager defaultManager] fileExistsAtPath:stringPath])
[[NSFileManager defaultManager] createDirectoryAtPath:stringPath withIntermediateDirectories:NO attributes:nil error:&error];
int i = 0;
for(_addedImage in _book.imageArray)
{
_book.bookAddedToArray = YES;
NSString *fileName = [stringPath stringByAppendingFormat:@"/image%i.jpg", i++];//image name
NSData *data = UIImageJPEGRepresentation(_addedImage, 1.0);
[data writeToFile:fileName atomically:YES];
}
[self.collectionView reloadData];
}
Это прекрасно работает.Все изображения сохраняются в нужном месте, как и ожидалось.
Пока приложение остается открытым, новые изображения можно просматривать в collectionView.Вы можете перемещаться в любом месте приложения, возвращаться и просматривать коллекцию.Когда приложение полностью закрывается, а затем снова открывается, collectionView сбрасывается и показывает только исходное изображение, которое было установлено в dataController (независимо от того, какой код я реализовал до сих пор. Он просто всегда сбрасывается).Все сгенерированные пользователем изображения все еще находятся в соответствующих папках в каталоге документов, но я не могу обновить cellForItemAtIndexPath: сохраненными изображениями, вероятно, потому что изображения не сохраняются в _book.imageArray.Прямо сейчас у меня есть ячейка, заполненная массивом изображений по умолчанию, так что, конечно, это то, что появится.Как мне обновить массив и извлечь из каталога документов, чтобы показать изображения пользователей?
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
if(_book.bookAddedToArray)
{
//*** HOW TO UPDATE _BOOK.IMAGEARRAY ????
cell.bookImageView.image = [_book.imageArray objectAtIndex:indexPath.row];
}
else
{
cell.bookImageView.image = [_book.imageArray objectAtIndex:indexPath.row];
}
return cell;
}
Я читал, что вы можете сохранить массив путей к каталогам в nsuserdefaults и получить егозаполнить образ массива, но мне еще предстоит найти решение, которое работает для меня.Кажется, что ни один из ответов не относится к загрузке в просмотр коллекции или таблицыМожет кто-то указать мне верное направление?Пожалуйста?Кто-нибудь?Лол.Дайте мне знать, если вам нужно увидеть больше кода.Все предложения очень ценятся!
В конечном итоге приложение необходимо будет переписать, поскольку оно вышло за рамки моего исходного кода, но в настоящее время я работаю с этим.Я, вероятно, в конечном итоге буду использовать CoreData, но я даже видел, где люди на SO рекомендовали не хранить изображения в CoreData и использовать каталог документов.Это все еще оставляет меня в той же ситуации.