Как применить процесс backgroud в моем приложении для iPad, не влияя на процесс, работающий на переднем плане? - PullRequest
1 голос
/ 18 марта 2011

Я занимаюсь разработкой приложения для iPad, в котором мне нужно загрузить файл с веб-службы, и я не хочу, чтобы это влияло на другие процессы, выполняющиеся на переднем плане.

В моем приложении отображаются данные из локальной базы данных, а также эти данные поступают из веб-службы.

Помощь приветствуется.

Большое спасибо заранее.

Ответы [ 4 ]

3 голосов
/ 18 марта 2011

NSURLConnection и его метод делегата позволят асинхронную (фоновую нить) загрузку запроса URL.

См. Ссылку на класс NSURLConnection

После получения данных с сервера вы должны проанализировать их в другом вторичном потоке. Затем вы можете сохранить его в базе данных.

Вы можете найти лучшую демонстрацию в примерах приложений Apple. Пожалуйста, проверьте приложение TopPaid .

В этом примере приложения нет модуля управления базой данных. Но научит вас разрабатывать Universal (совместимое с iPad и iPhone приложение).

1 голос
/ 18 марта 2011

вы можете использовать метод, описанный ниже, чтобы отсоединить поток

[NSThread detachNewThreadSelector:@selector(yourMethod) toTarget:self withObject:nil];

теперь выполняйте свою задачу в методе

-(void) yourMethod {
//ur work

}

удачи

1 голос
/ 18 марта 2011

Несколько мыслей:

  1. вы можете запустить процесс загрузки в отдельном потоке.

  2. Написать класс как показано ниже

@ interface FileDownloader: NSOperation

// с использованием следующих методов:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:
                         [NSURLRequest requestWithURL:
                          [NSURL URLWithString:fileRecord.fileURLString]] delegate:self startImmediately:YES];
0 голосов
/ 18 марта 2011

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

вызовите мой общий метод, который раскручивает новую нить

[[MyServiceSingleton sharedInstance] doSomeWorkInBackground:param1];

внутри синглтона - определить приватный метод - doSomeWorkBackgroundJob (я использую подход с пустой категорией) для вызова внутри метода doSomeWorkInBackground

[self performSelectorInBackground:@selector(doSomeWorkBackgroundJob:) withObject:param1];

в фоновом режиме - создание пула, выполнение работы, дренажный пул

- (void)doSomeWorkBackgroundJob:(NSString *)param1 {
NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc] init];
assert(pool != nil);

// you can call another method here or just create your synchronous request and handle the response data

[pool drain];

}

...