0

私がやっていることは、プッシュ ビュー コントローラーを適用して、テーブル ビューの didSelectMethod から次のビューに移動することです。そして、次のビュー コントローラーで、そのビューのデータがフェッチされます。したがって、問題は、データが完全にフェッチされ、画像とテキストの両方が含まれている場合にのみビューが切り替わることです。しかし、私はすでに画像の遅延読み込みを適用していますが、問題はすぐに次のビューに移動してからデータを取得し、UI とテーブルビューを更新することです。以下は私が試しているコードです。

次のView ControllerのdidLoadメソッドで。

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

すべてのデータ画像とテキストを取得する setImage メソッド。

-(void)setImage
{    
        if([type isEqualToString:@"Organisation"])
        {
            self.mGetDataDict = [MyEventApi members:self.mUserIdDict];
            self.mRecievedDataDict = [self.mGetDataDict valueForKey:@"members"];
        }
        if([type isEqualToString:@"Individual"]){
            self.mGetDataDict = [MyEventApi friends:self.mUserIdDict];
            self.mRecievedDataDict = [self.mGetDataDict valueForKey:@"friends"];
        }

        if([self.mGetDataDict valueForKey:@"friends"] == [NSNull null])
        {
            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"alert" message:@"You have not added any friend yet." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
        }
        else
        {
            self.mFrndNameArr = [[NSMutableArray alloc]init];
            self.mFrndImgArr = [[NSMutableArray alloc]init];
            self.mFirstNameArr = [[NSMutableArray alloc]init];
            self.mLastNameArr = [[NSMutableArray alloc]init];
            self.mFrndIdArr = [[NSMutableArray alloc]init];
            self.mFrndMSinceArr = [[NSMutableArray alloc]init];
            self.mFrndDescArr = [[NSMutableArray alloc]init];

            self.mFrndNameArr = [self.mRecievedDataDict valueForKey:@"username"];
            self.mFrndImgArr = [self.mRecievedDataDict valueForKey:@"image"];
            self.mFirstNameArr = [self.mRecievedDataDict valueForKey:@"firstName"];
            self.mLastNameArr = [self.mRecievedDataDict valueForKey:@"lastName"];
            self.mFrndIdArr = [self.mRecievedDataDict valueForKey:@"id"];
            self.mFrndMSinceArr = [self.mRecievedDataDict valueForKey:@"memberSince"];
            self.mFrndDescArr = [self.mRecievedDataDict valueForKey:@"description"];

             [self.mFriendsTable reloadData];
        }    
 }

上記のガイドをお願いします。私は正しい方法を使用していますか、これを行う別の方法があります。前もって感謝します。

4

3 に答える 3

0

GCDを使用できます

   dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
        //Fire api
        dispatch_async(dispatch_get_main_queue(), ^{
          //update ui
        });
    });
于 2013-07-22T12:46:36.787 に答える
0

コンテキストで NSThread API を使用しないことをお勧めします。GCD や NSOperation などの API はより高いレベルにあり、探しているソリューションを提供します。

GCD を使用した実装は次のようになります

dispatch_queue_t backgroundQueue = dispatch_queue_create("backgroundQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(backgroundQueue, ^{
    // update your method to remove the table refresh
    [self setImage];

dispatch_async(dispatch_get_main_queue(), ^{
    //Update the UI on the main thread
    [self.mFriendsTable reloadData];
});
于 2013-07-22T12:54:11.607 に答える