Intereting Posts
Использование сторонней библиотеки внутри рамки Метод категории NSString не получает вызов CFBundleDocumentTypes с Photo Library / Camera Roll ограничение скорости передачи данных nsurlconnection для приоритезации других Ошибка Visual Studio Cordova «Не найдено подходящих профилей обеспечения: не найдено профилей инициализации, соответствующих идентификатору пакета». Как получить лат и длинный центр google map iOS UIImage на CGLayer Приложение отклонено для аудиопотока более 5 Мбит / 5 минут? Доступность данных и отслеживание данных Поиск иерархии UIView с использованием функционального Swift CoreData ожидает строку при возврате массива и NSData при возврате строки Измените часть карты текстур, которая используется в OpenGL ES 2.0 Связать CGAffineTransformRotation с CGAffineTransformTranslation Facebook SDK получает подсчет друзей, которые были приглашены Приложение Apple store – правила по внешним ссылкам / url Правильный способ создания делегата MapKit в отдельном классе

Результаты блока анализа iOS хранятся в UILabel

Я использую SDK Parse iOS, и я хотел бы сохранить : query in a findObjectsInBackgroundWithBlock : query in a UILabel . The UILabel is created inside of the viewForHeaderInSection`: моего представления в таблице.

Если я создам UILabel внутри блока, я могу успешно сохранить UILabel значение и показать ярлык в моем представлении. Когда запрос выполняется в Parse, он пытается подключиться к серверу 3 раза, прежде чем запрос будет использовать локальный кеш. Если какой-либо из попыток завершится неудачей или если соединение с сервером замедляется, мой UILabel мерцает. Я не хочу этого, поэтому я решил каким-то образом получить доступ к результатам моего запроса за пределами блока и сохранить его как UILabel после завершения блока.

Может ли кто-нибудь показать мне, как получить доступ к результатам моего запроса за пределами блока и сохранить результат в UILabel ?

Пример, который у меня ниже, заключается в том, как я в настоящее время создаю UILabel в своем представлении и отображаю результат моего блока как UILabel . Спасибо за помощь!

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *myHeader = [[UIView alloc] initWithFrame:CGRectMake(0,60,320,20)]; myHeader.backgroundColor = [UIColor grayColor]; PFQuery *query = [PFQuery queryWithClassName:@"ClassName"]; query.cachePolicy = kPFCachePolicyNetworkElseCache; [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { if (!error) { NSNumber *sum = [objects valueForKeyPath:@"@sum.sumResults"]; UILabel *myLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(15,0,120,20)] ; myLabel1.font = [UIFont boldSystemFontOfSize:14.0]; myLabel1.text = [NSString stringWithFormat:@"Sum results: %.1f", [sum floatValue]]; [myHeader addSubview:myLabel1]; } else { NSLog(@"Error: %@ %@", error, [error userInfo]); } }]; return myHeader; } 

Solutions Collecting From Web of "Результаты блока анализа iOS хранятся в UILabel"

Большая часть проблемы заключается в том, что вы создаете свой ярлык в findObjectsInBackgroundWithBlock результата « findObjectsInBackgroundWithBlock » (завершение). Таким образом, это нелегко доступно для любого другого места в вашем приложении за пределами этого блока кода.

То, что я бы рекомендовал сделать, это иметь UILabel как IBOutlet (то есть вы помещаете его в свой раскадровки или файл xib и подключаете его к розетке в контроллере просмотра).

Затем, когда вы получите результаты, которые хотите отобразить, postNotificationName:object:userInfo: уведомление себе (или любым наблюдателям), что пришло время обновить (я бы рекомендовал postNotificationName:object:userInfo: где словарь userInfo содержит любую информацию, которую вы хотите добавить к этому метка).

Вы создаете свой ярлык в блоке, что делает его недоступным для остальной части вашего кода. Чтобы получить доступ к ярлыку из-за пределов блока, создайте свойство в файле .m:

 @interface YourViewController() //here comes your label @property (strong, nonatomic) UILabel *myLabel1; @end 

И затем синтезируйте его после @implementation:

 @implementation YourViewController @synthesize myLabel1; 

Теперь вместо вызова

 UILabel *myLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(15,0,120,20)]; 

просто позвоните

 myLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(15,0,120,20)]; 

Затем вы можете получить доступ к своей метке во всем своем коде (но убедитесь, что вы ее уже инициировали при попытке получить к ней доступ! В вашем случае, когда вы придерживаетесь ее viewForHeaderInSection методе viewForHeaderInSection , убедитесь, что вы viewForHeaderInSection к ней только после того, как этот метод и ярлык эффективно инициирован.