NSOperation не добавляет subview к основному виду - PullRequest
0 голосов
/ 19 июля 2010

Я сталкиваюсь со странным поведением при использовании NSOpeation. Я вызываю функцию (-createTagView), которая создает UIButton, чтобы затем добавить его в представление. По некоторым причинам это не добавляет их. Если я вызываю функцию извне NSOperation все работает нормально.

Есть идеи? Спасибо.

Вот как я создаю NSOperation (внутри объекта ViewController)

> NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(createTagView:) object:data];   
> [operationQueue addOperation:operation];
> [operation release];

И эта функция называется ([Вид тега] - это UIButton):

-(void) createTagView:(NSMutableArray *) data
{
 NSInteger t_id  = (NSInteger)[data objectAtIndex:0];
 NSString *t_name = (NSString *)[data objectAtIndex:1];
 NSString *t_rawname = (NSString *)[data objectAtIndex:2];


 Tag *t = [[Tag alloc] initWithId:(NSInteger)t_id name:t_name rawname:t_rawname];

 [self.view addSubview:[t view]];

 [t release];
}

1 Ответ

0 голосов
/ 19 июля 2010

NSOperation использует отдельный поток для запуска, вы должны вызвать [addSubview:] в основном потоке. Есть метод [object executeSelectorOnMainThread: withObject: waitUntilDone:] - вы можете использовать его для добавления подпредставления.

[self.view performSelectorOnMainThread:@selector(addSubview:) withObject:aView waitUntilDone:YES];
...