0

私は現在、Facebookから派生した特定のイベントを持つ人々のリストを表示するUITableViewを持っています。現在、コアデータのフェッチと挿入に問題はありませんが、テーブルビューの更新にかかる時間はおそらく約 12 秒です

ユーザーは最初にイベントを選択します

そして編集画面に入る

イベントの種類をアニバーサリー(風船)に変更

私は家に帰るのと同じようにナビゲートしますが、ここに問題があります.私のテーブルビューはおそらく12秒後に記念日タイプのイベントに更新されます.なぜテーブルビューの更新にそんなに遅れがあるのですか

cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{
static NSString *CellIdentifier = @"EventCell";

//testing


EventCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
PersonEvent *currentEvent = [self.eventsArray objectAtIndex:indexPath.row];

[cell configureForEvent:currentEvent];
//  NSLog(@"Event date is %@",[currentEvent.eventDate description]);
// NSLog(@"Time interval %f",[currentEvent timeDifference]);
//[self configureCell:cell atIndexPath:indexPath];
return cell;

}

configureForEvent

-(void)configureForEvent:(PersonEvent*)theEvent
 {

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
dispatch_async(queue, ^{
    //performing async operation her

    dispatch_sync(dispatch_get_main_queue(), ^{

        personLabel.text = theEvent.name;
        dateLabel.text = [theEvent getFriendlyDate];
        //  NSInteger theAge = [theEvent getAge];
        if (theEvent.hasAge) {
            //  NSLog(@"Have to load the age as well for %@",theEvent.name);
            ageLabel.text = [NSString stringWithFormat:@"%d yrs",[theEvent getAge] ];
        }
        else{
            ageLabel.text = @"";
        }

        //ageLabel.text = [NSString stringWithFormat:@"%d yrs",[theEvent getAge] ];
        reminderImage.image = [theEvent.theReminders count] == 0?[UIImage imageNamed:@"reminder.png"]:nil;
        // Have to configure event type image based on the event type..
        //NSLog(@"Event image %@",[eventTypeImagesArray objectAtIndex:theEvent.eventType]);
        eventTypeImage.image = [UIImage imageNamed:[eventTypeImagesArray objectAtIndex:theEvent.eventType]];;

        // Update UI
        // Example:
        // self.myLabel.text = result;
    });
});



}

initWithNibName で呼び出される loadAllEventz メソッド

-(void)loadAllEventz
{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"PersonEvent" inManagedObjectContext:appDelegate.managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]initWithKey:@"eventDate" ascending:YES];
[fetchRequest setSortDescriptors:@[sortDescriptor]];

NSError *error;
    allEventsArray = [appDelegate.managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSLog(@"%@",allEventsArray); 
//  [appDelegate.managedObjectContext executeFetchRequestAsynchronously:fetchRequest delegate:self];


 }

PersonEvent クラスは NSManagedObject サブクラスです

4

3 に答える 3

0

UITableView は高速に動作します。問題はtableViewにはありません。「非同期操作の実行」で経過時間を測定することをお勧めします。

于 2013-05-14T11:46:13.737 に答える
0

たぶん私はこれをすべて間違って見ていますが、イベントが更新されると、更新を Web サービスに送信し、に戻ったときに Web サービスから取得しますTableViewか? もしそうなら、それは非常に非効率的です。変更されたデータがわかっているので、delegateメソッド (またはunwind segue) を使用して更新を に送り返し、その更新TableViewをバックグラウンドで Web サービスに送信してみませんか? まだ持っていない情報が必要でない限り、Web サービスを再度ポーリングする必要はありません。フローを見ると、Web サービスを再ポーリングして、既に知っている更新を取得しているようです。

また、画像について。リマインダーに使用している画像の小さな静的グループのように見えます. それらを(アプリの最初のロード時に)一度ダウンロードしてから、ローカルに保存されているものを使用して、毎回取得しないようにしてください。

于 2013-05-14T10:16:14.967 に答える
0

テーブルビューのパフォーマンスは、データソース メソッドによって異なります。

あなたのコードではGCDを実装しましたが、実行はメインスレッド自体で行われます!!

画像の読み込みが遅いことが問題です。画像の挿入に GCD を使用するか、Asynchimageview /AFnetworking extension、SDWebimageView などのクラスを使用します。

于 2013-05-14T09:56:42.113 に答える