Intereting Posts
CCParticleSystemQuad удален преждевременно – ios Преобразование кодов ошибок в текст в iOS Как ObjectiveC mutableCopy работает в быстрой Как пройти номер через performSelector? Почему мой заголовок не изменяется с использованием Core Location? StringWithFormat Для int Значение имеет один вопрос Преобразовать строку даты (2016-04-27T08: 06: 07.531Z) в определенный формат даты dd.MM.YYYY Может ли приложение получать данные Bluetooth, если оно заблокировано? Бортовая / сквозная автозагрузка Не удалось установить фоновое изображение для UICollectionView Как избежать моего приложения, которое будет прекращено, когда оно будет запущено и будет отслеживать мое местоположение в фоновом режиме? Чтобы настроить это приложение как приложение для маршрутизации iOS, Info.plist приложения должен содержать ключ MKDirectionsApplicationSupportedModes Поведение пинбола SpriteKit UIDocumentInteractionController не отображается UILocalnotification не отображается в iOS7

Результаты блока анализа 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; } 

Большая часть проблемы заключается в том, что вы создаете свой ярлык в 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 к ней только после того, как этот метод и ярлык эффективно инициирован.