2015-03-31 2 views
0

Я ищу помощь при попытке обновить индикатор прогресса с использованием структуры MRProgress. Я смог настроить индикатор прогресса, но я не знаю, как рассчитать и обновить его прогресс. Я использую CloudKit и пытаюсь показать прогресс при сохранении CKRecord. Может ли кто-нибудь дать мне какое-то направление? Заранее спасибо!Обновление прогресса с MRProgress

self.hud = [MRProgressOverlayView showOverlayAddedTo:self.myCollectionView animated:YES]; 
self.hud.mode = MRProgressOverlayViewModeDeterminateCircular; 
self.hud.titleLabelText = @"Uploading..."; 

// prepare the CKRecord and save it 
[self.ckManager saveRecord:[self.ckManager createCKRecordForImage:self.imageDataAddedFromCamera] withCompletionHandler:^(CKRecord *record, NSError *error) { 
     if (!error && record) { 
      NSLog(@"INFO: Record saved successfully for recordID: %@", record.recordID.recordName); 
      // need to get the recordID of the just saved record before adding the CID to the CIDArray 
      self.imageDataAddedFromCamera.recordID = record.recordID.recordName; 
      [self.imageLoadManager addCIDForNewUserImage:self.imageDataAddedFromCamera]; // update the model with the new image 
      // update number of items since array set has increased from new photo taken 
      self.numberOfItemsInSection = [self.imageLoadManager.imageDataArray count]; 
      //[MRProgressOverlayView dismissAllOverlaysForView:self.view animated:YES]; 
      [self.hud dismiss:YES]; 
      [self.hud removeFromSuperview]; 
     } else { 
      NSLog(@"ERROR: Error saving record to cloud...%@", error.localizedDescription); 
      [self alertWithTitle:@"Yikes!" andMessage:@"We encountered an issue trying to upload your photo to the cloud."]; 
      } 
}]; 

Обновление: Преобразование методов облачного метода из удобного API в CKOperations в моем классе CKManager. Я могу увидеть обновление прогресса через журнал, но я не вижу, как вернуть его в viewcontroller. Если бы я должен был добавить его к обработчику завершения, не было бы это только отправить его назад, как только все будет завершено? Вот мой обновленный код ...

CKManager.h - (void) saveRecord: (NSArray *) records withCompletionHandler: (void (^) (NSArray * records)) completeHandler;

CKManager.m - (Недействительными) saveRecord: (NSArray *) записывает withCompletionHandler: (аннулируются (^) (NSArray *)) completionHandler {

NSLog(@"INFO: Entered saveRecord..."); 
CKModifyRecordsOperation *saveOperation = [[CKModifyRecordsOperation alloc] initWithRecordsToSave:records recordIDsToDelete:nil]; 

saveOperation.perRecordProgressBlock = ^(CKRecord *record, double progress) { 
    if (progress <= 1) { 
     NSLog(@"Save progress is: %f", progress); 
    } 
}; 

saveOperation.completionBlock =^{ 
    NSLog(@"Save operation completed!"); 
    completionHandler(records); 
}; 

[self.publicDatabase addOperation:saveOperation]; 

}

ответ

1

если вы хотите показать прогресс операции, тогда вы должны использовать CKModifyRecordsOperation и использовать метод perRecordProgressBlock.

+0

Спасибо, сэр! Я займусь этим. – SonnyB

+0

Я предполагаю, что вы говорите конкретно об этом ... perRecordProgressBlock Свойство Блок для выполнения с информацией о ходе выполнения для отдельной записи. Объявление ОБЪЕКТИВ-C @property (неатомный, копия) void (^ perRecordProgressBlock) (запись CKRecord *, двойной прогресс) – SonnyB

+0

Да, это так. Имейте в виду, что нет никакой гарантии, что это называется. В документации указано: Объект операции выполняет этот блок в ноль или более раз для каждой записи в свойстве recordsToSave. –