Я создал NSManagedObject* imagesArrayData
, который хранит струнные (пути) к изображениям, хранящимся в каталоге документов:Receiveing массив изображений из CoreData
- (void)setImagesArray:(NSMutableArray *)imagesArray {
NSMutableArray* newImagesArray = [NSMutableArray new];
int i = 1;
for (UIImage* image in imagesArray) {
//generate path to createdFile
NSString* fileName = [NSString stringWithFormat:@"%@_%d", self.name, i];
NSString* filePath = [self documentsPathForFileName:fileName];
//save image to disk
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:filePath atomically:YES];
//add image path to CoreData
[newImagesArray addObject:filePath];
i++;
}
//set new value of imagesArray
imagesArrayData = [NSKeyedArchiver archivedDataWithRootObject:newImagesArray];
Я теперь не показывая pathsToImages в заголовочном файле, но свойство imagesArray:
-(NSMutableArray*) imagesArray {
NSMutableArray* images = [NSMutableArray new];
NSArray* imagePaths = [NSKeyedUnarchiver unarchiveObjectWithData:imagesArrayData];
for (NSString* imagePath in imagePaths) {
UIImage *image = [[UIImage alloc] initWithContentsOfFile: imagePath];
[images addObject:image];
}
return images;
проблема заключается в том, что всякий раз, когда я хочу, чтобы добраться до [imagesArray objectatIndex:xxx]
Поглотителя imagesArray называется, и это занимает много времени, чтобы воссоздать полный массив. При попытке переключения между изображениями пользовательский интерфейс замедляется. Каким будет элегантный способ преодолеть эту проблему? Может быть, создать еще один массив, полный изображений и время от времени обновляющий его? Может быть, что-то еще? Пожалуйста помоги.
Звучит просто и удобно, но я получаю ошибку при вводе _imagesArray - использование необъявленного идентификатора. У меня есть свойство (неатомное, сохранение) NSMutableArray * imagesArray; в моем * .h файле, но в * .m Я использую atdynamic imagesArray. Я не уверен, но при использовании atdynamic я не могу использовать «_variable» нотацию. Когда меняют на self.imagesArray, я перехожу в бесконечный цикл getArray. – izik461
Если вы используете @dynamic, тогда вам нужно создать переменную частного экземпляра, которая называется _imagesArray. Просто добавьте объявление в свой файл заголовка. И вы используете «сохранить»? Почему вы используете ручной подсчет ссылок? Он должен быть «(неатомным, сильным»), если вы используете ARC. –
Я сделал то, что вы предложили, и он работает красиво. Я не использую удержание. Благодаря! – izik461