2013-08-07 10 views
0

Я пытаюсь создать кнопку, которая при нажатии создает событие календаря и изменяет название указанной кнопки на «Созданное событие» или, возможно, создает AlertView с тем же эффектом. Это мой код до сих пор:Невозможно изменить UIButton в коде EKEvent

- (IBAction)AddToCal:(id)sender { 
EKEventStore *store = [[EKEventStore alloc] init]; 

    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 
    if (!granted) { 
     //Code to handle not-granted 
    } 
    else { 
      //Code to create event   
      [event setCalendar:[store defaultCalendarForNewEvents]]; 
      NSError *err; 
      [store saveEvent:event span:EKSpanThisEvent error:&err]; 
      [[NSUserDefaults standardUserDefaults] setBool:true forKey:[NSString stringWithFormat:@"%@Sub", PrevDest] ]; 
      [[NSUserDefaults standardUserDefaults] synchronize]; 
      [AddReminder setTitle: [NSString stringWithFormat:@"Subscribed!"] forState: UIControlStateNormal]; 

      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Event Added!" 
                  message:@"" 
                  delegate:nil 
                cancelButtonTitle:@"OK" 
                otherButtonTitles:nil]; 
      [alert show]; 
      } 
    }]; 
    //Where I tested different placement of the code 
} 

Теперь это создает событие все хорошо и денди, но это не создает AlertView или изменить название, как подтверждение, и даже больше, это делает мое приложение заморозить и стать не реагируя на касание ... до тех пор, пока я не нажму кнопку «домой», а затем снова откройте приложение, и в этот момент название изменится, и появится AlertView.

Я пробовал помещать код изменения названия в отмеченное место, что заставляет его работать, но это, конечно, находится за пределами if (! Предоставлено) и поэтому приведет к изменению кнопки независимо от того, что. И даже помещение кода приводит к таким же явлениям замерзания.

У меня действительно нет понятия, что с этим. У кого-нибудь здесь была такая же проблема?

+0

Добавить контрольную точку, чтобы увидеть, если тревога вид когда-либо будет создаваться. –

+0

Я помещал три перерыва в заголовке изменения, создавал предупреждение и показывал предупреждение. Программа остановилась во всех трех местах, и предупреждение было не ноль, однако оно все еще не отображалось, и кнопка не изменилась. – Jackson

ответ

1

Try:

dispatch_async(dispatch_get_main_queue(), ^{ 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Event Added!" 
                 message:@"" 
                 delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
     [alert show]; 
}); 
+0

Это сработало! Благодаря! Но почему? – Jackson

+0

Вы должны быть в главной теме, чтобы показать UIAlertView. –

+0

Я вижу. Предположим, вам также нужно быть в основном потоке, чтобы изменить название UIButton? Как только я добавил к этому код setTitle:, все работало отлично. – Jackson