Я не могу установить массив с серией изображений, хранящихся в моем основном хранилище данных IOS - PullRequest
0 голосов
/ 04 августа 2011

Это беспокоило меня уже 2 дня, и я не могу обдумать это. Я хочу извлечь несколько изображений, которые хранятся в моем основном хранилище данных. Изображения выбираются пользователем с помощью средства выбора изображений и отображаются размером менее 70 КБ, преобразуются в данные и извлекаются в основное хранилище данных. Изображения должны быть использованы в слайд-шоу. Объект называется ImageCD, а изображение хранится в атрибуте friendsPhoto. Я также выделяю атрибут даты для сортировки изображений. Это делается, когда изображение сохраняется, а также является атрибутом ImageCD.

Я использую следующий код для TRY и задаю массив, но он ничего не возвращает. я не получаю (NULL) показания на отладчике только что "Количество элементов в массиве = 0;"

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1];
NSLog(@"array's content sortDe:%@",sortDescriptors);

NSMutableArray* sortedImages = [[NSMutableArray alloc] initWithObjects:imageCD.friendsPhoto, nil];
[sortedImages sortUsingDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release]; 
NSLog(@"array's content:%@",sortedImages);


imageArray = [[NSMutableArray alloc]init] ;
self.imageArray = sortedImages;
NSLog (@"Number of elements in array = %i", [imageArray count]);


self.theImageView.animationImages = [[NSArray alloc] initWithArray:imageArray];
NSLog(@"animationImages:%@",self.theImageView.animationImages);

Итак, что я делаю не так? У меня есть подозрения, что это связано с этой строкой кода ...

NSMutableArray* sortedImages = [[NSMutableArray alloc] initWithObjects:imageCD.friendsPhoto, nil];

Но не могу понять, какой должна быть альтернатива. Я навсегда буду обязан тому, кто сможет исправить мою ошибку. Я заранее благодарю вас и, пожалуйста, дайте мне знать, если вам нужна дополнительная информация, пиво или бутерброд с беконом.

Ох, чтобы сохранить здравомыслие, я проверил изображения, добавив класс из моего предыдущего приложения (My Outfit), который использует этот подход для извлечения изображений из базовых данных, НО в tableView, так называемом в cellForRowInIndexPath и т. Д., И все изображения являются звуковыми.

DetartrateD

 2011-08-04 19:40:33.051 My Class Book[1027:707] After managedObjectContext:         <NSManagedObjectContext: 0x1821b0>
2011-08-04 19:40:33.057 My Class Book[1027:707] array's content sortDe:(
"(date, ascending, compare:)"
   )
  2011-08-04 19:40:33.059 My Class Book[1027:707] array's content:(
)
2011-08-04 19:40:33.061 My Class Book[1027:707] Number of elements in array = 0
2011-08-04 19:40:33.063 My Class Book[1027:707] animationImages:(
)

Теперь исправлено с этими изменениями ...

NSMutableArray *mutableFetchResultsA = [[managedObjectContext  executeFetchRequest:requestA error:&error] mutableCopy];
if (mutableFetchResultsA == nil) {
    NSLog(@"Testing: No results found");

}
else {

    NSLog(@"Testing: %d Results found.", [mutableFetchResultsA count]);
    NSLog(@"array's content sortDe:%@",mutableFetchResultsA);
}   
[sortDescriptor release];
[sortDescriptors release]; 


imageArray = [[NSMutableArray alloc]init] ;
self.imageArray = [mutableFetchResultsA valueForKey:@"friendsPhoto"];

[mutableFetchResultsA release];
[requestA release];

...

1 Ответ

0 голосов
/ 05 августа 2011

Предполагая, что изображения хранятся как NSData * атрибуты в сущности ImageCD, вот что вам нужно сделать:

self.imageArray = [self getImagesInManagedObjectContext:self.managedObjectContext];

Вот метод getImagesInManagedObjectContext:.Этот метод извлекает из основного хранилища данных ImageCD объекты, отсортированные с использованием вашего атрибута по мере необходимости, затем создает и возвращает автоматически освобожденные NSMutableArray из UIImage * объектов или ноль, если объекты не были найдены.

- (NSMutableArray *) getImagesInManagedObjectContext:(NSManagedObjectContext *)moc{
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"ImageCD" inManagedObjectContext:moc];
    [request setEntity:entity];

    // Edit the sort key as appropriate.
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];

    NSError *error = nil;
    NSMutableArray *array = [NSMutableArray arrayWithArray: [moc executeFetchRequest:request error:&error]];
    [request release];
    [sortDescriptor release];
    [sortDescriptors release];
    if (array && [array count] && !error){
                // create an array of images
                NSMutableArray *images = [[NSMutableArray alloc] init];
                for(ImageCD *obj in array){
                   UIImage *img = [UIImage imageWithData: (NSData *) obj.friendsPhoto];
                   [images addObject:img];
                }

        return [images autorelease];
    }
    else
        return nil;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...