2015-06-06 4 views
1

Im пытается реализовать прогресс загрузки MBProgressHUD.MBProgressHUD не сохраняет переменные свойств (NULL)

Вот мой код:

//Previously defined @property(nonatomic) NSString *sec; 

-(void) viewDidLoad{ 
    HUD = [[MBProgressHUD alloc] initWithView:self.view]; 
    [self.view addSubview:HUD]; 
    HUD.delegate = self; 
    [HUD showWhileExecuting:@selector(loadData) onTarget:self withObject:nil animated:YES]; 

    //testing the "return" value 
    NSLog(@"%@", sec); 
} 

-(void) loadData{ 
    //get data from file named "results.csv" 
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]; 
    NSString *saving = [docPath stringByAppendingPathComponent:@"results.csv"]; 

    if([[NSFileManager defaultManager] fileExistsAtPath: saving]){ 
     NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:saving]; 
     NSString *dataResults = [[NSString alloc]initWithData:[fileHandle availableData] encoding:NSUTF8StringEncoding]; 
     [fileHandle closeFile]; 

     sec = dataResults; 
     sec = [sec substringFromIndex: [sec length] - 20]; 
    } 
} 

Как вы можете видеть в методе «LoadData» Мне нужно установить «втор» NSString как содержание, которое сохраняется в файле «results.csv». Вы можете видеть еще одну вещь, что после кода HUD: «showWhileExecuting» я был поставлен NSLog для проверки, действительно ли он получает содержимое файла, и он возвращает (NULL) !!

Прежде чем я добавил эту вещь HUD, она действительно получила реальное значение из файла, но теперь ее значение null.

Вне курса, когда я поместил строку кода NSLog в конце метода loadData, он печатает реальное значение вместо (NULL).

Итак, большая проблема, из-за которой я не могу получить переменные из метода HUD. Единственное решение, о котором я думал, заключалось в создании другого файла и хранении всех новых переменных, но это не помогло мне.

Кто-нибудь знает, о чем я говорю и могу мне помочь?

+0

Поместите NSLog в свои данные о нагрузке и проверьте, что хранится в вашей переменной данных. –

+0

@NeilGaliaskarov It Распечатывает реальное значение. – Nir

+0

как вы объявляете переменную sec? –

ответ

0

Что вы видите, это нормально. Ваш NULL, показывающий NSLog, выполняется сразу же после вызова showWhileExecuting, прежде чем планируется запустить loadData. Вы должны реализовать протокол делегата MBProgressHUDDelegate,

- (void)hudWasHidden:(MBProgressHUD *)hud{ 
    NSLog(@"%@", sec); 
} 

Когда loadData завершается, HUD будет скрывать, и вызвать этот метод. То есть, когда вы получаете loadData.

obcit: не проверено, из памяти, с «антикварным» MBProgressHUD, но это хороший шанс, что он должен сработать для вас.

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