আমি আমার ইউআইটিএবলভিউ ঘরের ভিতরে ছবি লোড করার জন্য দুটি উপায় লিখেছি। উভয় ক্ষেত্রেই ছবিটি সূক্ষ্ম লোড হবে তবে আমি যখন টেবিলটি স্ক্রোল করব তখন স্ক্রোলটি শেষ না হওয়া অবধি চিত্রগুলি কয়েকবার পরিবর্তন হবে এবং চিত্রটি ডান চিত্রটিতে ফিরে যাবে। আমি এই ঘটছে কেন কোন ধারণা আছে।
#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
- (void)viewDidLoad
{
[super viewDidLoad];
dispatch_async(kBgQueue, ^{
NSData* data = [NSData dataWithContentsOfURL: [NSURL URLWithString:
@"http://myurl.com/getMovies.php"]];
[self performSelectorOnMainThread:@selector(fetchedData:)
withObject:data waitUntilDone:YES];
});
}
-(void)fetchedData:(NSData *)data
{
NSError* error;
myJson = [NSJSONSerialization
JSONObjectWithData:data
options:kNilOptions
error:&error];
[_myTableView reloadData];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
// Return the number of rows in the section.
// Usually the number of items in your array (the one that holds your list)
NSLog(@"myJson count: %d",[myJson count]);
return [myJson count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
myCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell == nil) {
cell = [[myCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
dispatch_async(kBgQueue, ^{
NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://myurl.com/%@.jpg",[[myJson objectAtIndex:indexPath.row] objectForKey:@"movieId"]]]];
dispatch_async(dispatch_get_main_queue(), ^{
cell.poster.image = [UIImage imageWithData:imgData];
});
});
return cell;
}
... ...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
myCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell == nil) {
cell = [[myCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://myurl.com/%@.jpg",[[myJson objectAtIndex:indexPath.row] objectForKey:@"movieId"]]];
NSURLRequest* request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse * response,
NSData * data,
NSError * error) {
if (!error){
cell.poster.image = [UIImage imageWithData:data];
// do whatever you want with image
}
}];
return cell;
}
poster
? এটি সম্ভবত তার কাস্টম সেলটিতে একটি চিত্রদর্শন, সুতরাং EXEC_BAD_ACCESS যা করছে তা পুরোপুরি সঠিক। আপনি সঠিক বলেছেন যে আপনার ঘরটি মডেল ডেটার জন্য সংগ্রহস্থল হিসাবে ব্যবহার করা উচিত নয়, তবে আমি মনে করি না তিনি এটি করছেন। তিনি কেবলমাত্র কাস্টম সেল দিচ্ছেন যা নিজেকে উপস্থাপন করতে হবে। তদ্ব্যতীত, এবং এটি আরও সূক্ষ্ম ইস্যু, আমি নিজের টেবিলভিউকে সমর্থন করে আপনার মডেল অ্যারেতে কোনও চিত্র সংরক্ষণ করার বিষয়ে সতর্ক থাকব। চিত্রের ক্যাশে করার পদ্ধতিটি ব্যবহার করা আরও ভাল এবং আপনার মডেল অবজেক্টটি সেই ক্যাশে থেকে ফিরে আসা উচিত।