доступ к переменным / функциям из подкласса в Objective C - PullRequest
1 голос
/ 10 января 2010

У меня проблема с доступом к общедоступной переменной 'activity' типа UIActivityIndicatorView, см. Объявление класса ниже в QuickStartViewController.h:

@interface QuickStartViewController : UIViewController <ABPeoplePickerNavigationControllerDelegate> {
@public
IBOutlet UIActivityIndicatorView *activity;

}

@property (nonatomic, retain) UIActivityIndicatorView *activity;

@end

Функция вызывается из другого класса:

#import "QuickStartViewController.h"
@interface NumberValidator : QuickStartViewController....

См. Ниже:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[activity startAnimating];
NSLog(@"This function is called, but [activity startAnimating] still doesn't work...");
}

Примечание: [activity startAnimating] отлично работает при вызове в классе QuickStartViewController.

Есть ли у вас какие-либо предложения относительно того, почему [activity startAnimating] не работает?

Ответы [ 5 ]

1 голос
/ 24 января 2010

Макрос IBOutlet указывает, что UIActivityIndicatorView будет создан и назначен, когда экземпляр QuickStartViewController или NumberValidator создается с помощью NSBundle +loadNibNamed:owner:options: или вызывает UIViewController initWithNibName:bundle:

Если вы не создаете экземпляр своего NumberValidator через его nib, то свойство Activity не будет назначено. Если вы строите его с помощью пера, то вы не назначили розетку с соответствующим UIActivityIndicatorView в Интерфейсном Разработчике, нажав CTRL + Перетащите UIActivityIndicatorView на свой контроллер.

0 голосов
/ 10 января 2010

Спасибо за быстрые ответы.

ConnectionDidFinishLoading успешно выполняется, и я разместил NSLogs для подтверждения. Однако, StartAnimating не делает.

Примечание:

Если я делаю [активность запускает анимацию]; в следующем случае это работает ...:

QuickStartViewController.m (не NumberValidator.m) :

- (IBAction)showPicker:(id)sender {
[activity startAnimating];
...
}
0 голосов
/ 10 января 2010

Это, вероятно, работает - то есть индикатор активности начинает анимироваться. Однако может быть другая проблема - графический интерфейс не обновляется, пока вы не прекратите обработку метода connectionDidFinishLoading, и поэтому кажется , что [activity startAnimating] не работает. (Вы можете проверить это, не вызывая [активность stopAnimating] - она ​​должна появиться в конце концов.)

См. Например эта тема (connectionDidFinishLoading - как принудительно обновить UIView?) и мой ответ .

0 голосов
/ 10 января 2010

Это (а) не компилируется, (б) вылетает при попадании туда, или (в) просто ничего не делает? Я подозреваю, что это (с), и это потому, что у вас нет индикатора активности там. Попробуйте записать значение активности в консоль и убедитесь, что это действительный объект.

0 голосов
/ 10 января 2010

Я бы начал с установки точки останова в -connectionDidFinishLoading и проверки, что активность не равна нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...