Xcode4, iOS: некоторые части метода экземпляра игнорируются, ошибок нет, просто передаются - PullRequest
0 голосов
/ 27 июля 2011

новый парень с iOS здесь.У меня есть проблема, что поиск в Google и поиск здесь не пролили никакого света.Я предполагаю, что это основное.У меня есть простое приложение (делегат приложения и 1 контроллер представления), и как часть этого я использую локальное уведомление.Итак, в делегате приложения я использую didReceiveLocalNotification для отслеживания уведомлений.В зависимости от того, какой из них входит, я затем вызываю один из нескольких методов экземпляра в моем главном контроллере представления.

, т. Е. В AppDelegate.m

- (void)application:(UIApplication *)application didReceiveLocalNotification: (UILocalNotification *)notification {
   MyViewController* controller = [[MyViewController alloc] autorelease];
   if ([[notification.userInfo objectForKey:@"id"] isEqualToString:@"myKey"]) {
     [controller checkActive];
   }
 }

Через ведение журнала и просмотр некоторых точек останова,все работает.Если приложение работает в фоновом режиме, приходит уведомление, приложение открывается и вызывается правильный метод экземпляра.

Что я не могу понять, так это почему некоторые части метода экземпляра просто передаютсябез эффекта.Для простого примера, если у нас есть это:

-(void)checkActive {
    ViewThing.alpha = 1.0;
    NSLog(@"checkActive ran");
}

Оператор log будет отображаться нормально, но ViewThing не изменится.В другом месте контроллера основного представления я вызываю тот же метод checkActive без проблем, и он меняет ViewThing.(через другую интерфейсную кнопку метод IBAction в этом случае).

Нет ошибок, нет предупреждений, консоль ничего не показывает, установка точки останова на ViewThing показывает, что она попадает в строку.Я в замешательстве, не могу понять, чем отличается попытка вызова метода от делегата от IBAction.

Спасибо за любые советы!

1 Ответ

1 голос
/ 27 июля 2011

Если alpha не изменяется должным образом, существует несколько возможных проблем с 1 и 2, наиболее вероятными.

  1. ViewThing - это nil. Причины могут быть в том, что представление выгружено, и вы установили его на ноль, или checkActive был вызван до того, как были установлены торговые точки.

  2. ViewThing.alpha устанавливается для потока, который не является основным потоком. Попытка изменить элементы пользовательского интерфейса в отдельном потоке приведет к неопределенному поведению, такому как никогда не обновлять изменение или не тратить много времени на его обновление. Вы можете проверить, является ли это основным потоком, используя [NSThread isMainThread].

  3. ViewThing указывает на другое представление.

1 & 2 можно легко проверить, просматривая журнал

NSLog(@"checkActive ran %@", ViewThing);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...