iPhone SDK - асинхронные методы загрузки - PullRequest
0 голосов
/ 12 сентября 2010

В справочнике по загрузке Эрики Садун, ссылка здесь , я могу поместить эти методы в свои классы:

- (void) didReceiveData: (NSData *) theData;
- (void) didReceiveFilename: (NSString *) aName;
- (void) dataDownloadFailed: (NSString *) reason;
- (void) dataDownloadAtPercent: (NSNumber *) aPercent;

эти методы явно ссылаются на "DownloadHelper.h" иDownloadherHelper.m».Я хочу знать, могу ли я получить доступ к свойствам в представлении xib, таким как текстовые поля, uitableviews, uilabels ... и т. Д. Одним из этих методов.Например:

- (void) didReceiveFilename: (NSString *) aName {
    [label setText:@"hi"];
}

Я пытался сделать это, но объекты в представлении xib не будут обновляться.как в приведенном выше примере.Есть ли способ сделать это?

Спасибо,

Кевин

Ответы [ 2 ]

1 голос
/ 12 сентября 2010

Должна быть возможность доступа / обновления свойств любых торговых точек, которые вы связали со своей xib-карты в свой контроллер. Вы убедились в отладчике, что сообщение didReceiveFilename: отправляется на ваш контроллер и что label не ноль, когда ему отправляется сообщение setText:?

Редактировать : я общался с человеком, который разместил этот вопрос в автономном режиме. Проблема не была связана с асинхронными загрузками. Его код пытался уведомить контроллер о представлении, которое содержало табличное представление о том, что загрузка началась, но сообщение было отправлено не тому экземпляру контроллера. Исправление этой проблемы решило проблему.

Изменено с этого:

   // code that switched to an existing DownloadViewController omitted...
   // the new download controller that is created here has no views seen by the user!
   DownloadViewController *download = [[DownloadViewController alloc] init];
   [download downloadstart];

К этому:

   // code that switched to an existing DownloadViewController omitted...
   // use the existing DownloadViewController instead of creating a new one
   DownloadViewController *download = (DownloadViewController *)[[appDelegate.rootController viewControllers] objectAtIndex:1];
   [download downloadstart];

Метод downloadstart отвечает за обновление табличного представления в коде Кевина.

0 голосов
/ 12 сентября 2010

Обновления пользовательского интерфейса происходят в главном потоке, вы должны попробовать

executeSelectorOnMainThread: withObject: waitUntilDone:

[label performSelectorOnMainThread:@selector(setText:) 
           withObject:@"hi" waitUntilDone:NO];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...