0

質問があります。URL から JSON を取得すると、次のようになります。

- (NSMutableArray *)parseObject:(NSString *)object withKey:(NSInteger)key {
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *randomKey = [standardUserDefaults stringForKey:@"randomKey"];

NSString *urlString = [NSString stringWithFormat:@"http://domain.com"];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [NSData dataWithContentsOfURL:url];
NSError *error;
NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

NSArray* latestLoans = [json objectForKey:@"object"];
NSDictionary* loan = [latestLoans objectAtIndex:key];

NSArray *myWords = [[loan objectForKey:object] componentsSeparatedByString:@","];

return myWords;
}

私のTableViewへ

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

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}

cell.textLabel.text = [[self parseObject:@"bedrijfsnaam" withKey:0] objectAtIndex:indexPath.row];
//cell.detailTextLabel.text = [[self parseObject:@"leverunix" withKey:0] objectAtIndex:indexPath.row];
cell.textLabel.font = [UIFont systemFontOfSize:14.0];
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = 3;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}

ロードが非常に遅く、スクロールしたいときに一種のラグがあります。これを改善するにはどうすればよいですか?

ありがとう

4

3 に答える 3

3

呼び出されるたびにサーバーからJSONデータを取得しているようですcellForRowAtIndexPath。それは遅いに違いない!

データを 1 回だけ取得し (例: でviewDidLoad)、JSON を逆シリアル化し、結果をビュー コントローラーのプロパティに格納して、cellForRowAtIndexPathそこからオブジェクトを取得できるようにする必要があります。

于 2013-08-06T14:16:11.670 に答える
2

への電話

NSData *data = [NSData dataWithContentsOfURL:url]; 

Web URL からデータを取得している間、メイン スレッドがブロックされます。

非同期メソッドを使用してみてください。それは問題を解決します。

于 2013-08-06T14:21:15.860 に答える
0

あなたが呼んでいます

 - (NSMutableArray *)parseObject:(NSString *)object withKey:(NSInteger)key

cellForRowAtIndexPath で何度も繰り返します。

これは起こらないはずです。

データを viewDidLoad または viewWillAppear に入れてから、そのデータをグローバル変数に保存してください。

次に、その変数からデータを取得して必要な値を返す関数を呼び出します。

于 2013-08-06T14:18:58.473 に答える