2012-03-31 7 views
0

evernote apiを使ってiOS上にアプリケーションを開発中です。私はマルチスレッドに関するいくつかの問題があります。以下は、私のアプリのマルチスレッドの仕組みです、良いか悪いですか?いかなる提案も大歓迎です。iOS上でevernote apiを使ってマルチスレッドを処理する方法

  1. UIを表示および更新するには、MainThread(スレッドa)を使用します。
  2. noteListのページで、スレッドbを使用してevernoteからnoteListをダウンロードします。
  3. noteDetailページで、スレッドcを使用してevernoteからnoteResourceをダウンロードします。

スレッドbが終了していないときにnoteListページの1つのメモをクリックした場合。 noteResourceをダウンロードするにはスレッドCを使用する前にスレッドbをキャンセルする必要がありますか?スレッドbとスレッドcの両方を一度に実行するのは安全ですか?

これに関連する文書や授業はありますか?

以下のコードを追加しました。ユーザーが最初にログインすると、masterSyncが実行され、タイトルがダウンロードされて表示されます。その後、ユーザーが同期ボタンを押すと、masterSyncが再び実行されますが、今はアクセス認証時にクラッシュします。noteStore alloc/init、authResultの認証時にユーザーのログインが成功したときにauthResultを保存しましたか?

-(void)sync:(id)obj { 
    NSOperationQueue *operationQueue = [AppDelegate sharedOperationQueue]; 

    if ([obj isKindOfClass:[Note class]]) { 
     self.detailSync = [[[EvernoteDetailSync alloc] initWithNote:obj] autorelease]; 
     detailSync.noteStore =[[[EvernoteNoteStore alloc] initWithToken:[authResult authenticationToken] shardId:[[authResult user] shardId]] autorelease]; 
     [operationQueue addOperation:detailSync]; 
    } else { 
     self.masterSync = [[[EvernoteMasterSync alloc] initWithNotebookGuid:obj] autorelease]; 
     masterSync.noteStore =[[[EvernoteNoteStore alloc] initWithToken:[authResult authenticationToken] shardId:[[authResult user] shardId]] autorelease]; 
     [operationQueue addOperation:masterSync]; 
    } 
} 

答えて

0

Evernote NoteStoreクラスはスレッドセーフではありません。複数のEvernote APIリクエストを同時に実行するには、複数のNoteStoreオブジェクトを作成できます。

+0

私のコードを追加しました。あなたはそれを見ることができますか?ありがとう –

+0

私はマルチスレッドとの同期の前に毎回relogInする必要がありますか?はいの場合は、メインスレッドまたは2番目のスレッドでrelogInする必要がありますか? –

関連する問題