2012-06-08 3 views
0

У меня есть изображения на iCloud и я подклассифицировал UIDocument для них. Теперь я хочу отображать изображения в UITableView после загрузки ViewController. Поэтому я добавил этот код внутри метода viewDidLoadЗагрузка документа из iCloud перед представлением будет загружена

- (void)viewDidLoad  
    { 
     ... 
       iCloudImage *iClImage = [[iCloudImage alloc] initWithFileURL:ubiquitousPackage]; 
       [iClImage openWithCompletionHandler:^(BOOL success) { 
       if (success) {     
        NSLog(@"iCloud document opened"); 
        dataFromFileManager = [iClImage.imageDictionary objectForKey:img.fileName]; 
        imageToDraw = [[[UIImage alloc] initWithData:dataFromFileManager] autorelease]; 
       } else {     
        NSLog(@"failed opening document from iCloud");  
        imageToDraw = [UIImage imageNamed:@"defaultImage.jpg"]; 
       } 
       [arrayOfImages addObject:imageToDraw]; 
      }]; 
     ... 
    } 

Здесь я собираю все изображения один за другим в NSMutableArray *arrayOfImages, а затем использовать этот массив в методе - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath. Но они не отображаются в таблице, потому что они загружаются в другой поток. Как я могу исправить это и начать показывать UITableView только после загрузки изображений или установки изображений по умолчанию?

ответ

2

У меня недавно была та же проблема. Я не дождался загрузки представления до загрузки изображений, но вместо этого отобразил индикатор прогресса в таблице. Затем, когда изображения загрузились, я отправил NSNotification в представление, информирующее об этом, чтобы удалить индикатор прогресса и загрузить данные.

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

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