당신이 도와 줄 수 있기를 바랍니다. :)데이터를 파싱하는 동안 UI를 그리는 NSOperation?
주 스레드에서 NSOperation을 만들어 대기열에 추가합니다. NSURLConnection을 사용하여 데이터 서버에 연결하고 receivedData를 저장하고 파싱하는 작업은 무엇입니까?
- (void)start
{
NSLog(@"opeartion for <%@> started.", [cmd description]);
[self willChangeValueForKey:@"isExecuting"];
_isExecuting = YES;
[self didChangeValueForKey:@"isExecuting"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:_url];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", m_BOUNDARY] forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:_postData];
_connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (_connection == nil)
[self finish];
}
Operation.m는이 NSURL 위임 방법에 난 그냥 서버로부터받은 데이터를 분석합니다. 데이터에서 Operation.m
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[self parseItems];
}
, 내가 예를 들어, 같은 항목을 찾을 수 있습니다, 내가 도착하는 동안을 그리기 위해 메인 스레드로 보내 screenItem, CellItem, TextItem.
- (void) parseItems
{
while ([_data length] > 0)
{
NSInteger type = [self _readByte];
switch (type)
{
case SCREEN:
{
[self _send: [self _readScreen]];
break;
}
case CELL:
{
[self _send: [self _readCell]];
break;
}
// ... A lot of different items
}
}
}
- (void)_send:(CItem*)_item
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"newItem" object:_item];
}
그런
Operation.m : 메인 스레드에 항목을 보내는이 사용
(AN itemTable가 도착하면 나는 jQuery과 만들거나 itemWeb가 도착하면 내가있는 UIWebView를 만들 수) 알림 수신기 :
AppDelegate.m
- (void) _newItemArrived:(NSNotification *) notification
{
[self performSelectorOnMainThread:@selector(processItem:) withObject:[notification object] waitUntilDone:NO];
}
제 문제는 NSOperation이 완료 될 때까지 UI가 그려지지 않는다는 것입니다. 나는 다른 스레드 인 NSOpertion이 주 스레드를 차단하지 않을 것이라고 생각했지만 그 일은 일어나고 있다고 생각합니다.
이 호에 대한 몇 가지 팁이 있습니까?
읽어 주셔서 감사합니다.
방금 관련 질문에 답변했습니다. http://stackoverflow.com/questions/11158294/nsoperation-mainqueue-issue/13477136#13477136. 희망이 도움이됩니다. –