Я создаю приложение для iphone, теперь в этом приложении есть tabviewcontroller, а на одной из вкладок есть контроллер вида навигации.Внутри контроллера представления навигации у меня есть 2 контроллера UIview, и в одном я загружаю UITableView.Данные для ячеек загружаются из базы данных, и это занимает некоторое время, чтобы избежать этого, я делаю
[self performSelectorInBackground:@selector(loadTableData) withObject:nil];
, который загружает все данные в фоновом потоке.И вставляет Uitableview как подпредставление.Теперь ячейки в этой таблице извлекают изображения из определенных источников url (упомянутых в БД), и я асинхронно извлекаю эти изображения, используя метод, с которым я столкнулся в Интернете по адресу
http://www.markj.net/iphone-asynchronous-table-image/
Реализуя
(void)connection:(NSURLConnection *)theConnection didReceiveData:(NSData *)incrementalData
И
(void)connectionDidFinishLoading:(NSURLConnection*)theConnection
В подклассе UIView.который загружает изображения и помещает его в UIImageView.Все это происходит внутри
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
in После того, как метод connectionDidFinishLoading является жестким, это то, что должно произойти
-(void)connectionDidFinishLoading:(NSURLConnection*)theConnection{
[connection release];
connection=nil;
if ([[self subviews] count]>0) {
//then this must be another image, the old one is still in subviews
[[[self subviews] objectAtIndex:0] removeFromSuperview]; //so remove it (releases it also)
}
//make an image view for the image
UIImageView* imageView = [[[UIImageView alloc] initWithImage:[UIImage imageWithData:data]] autorelease];
//make sizing choices based on your needs, experiment with these. maybe not all the calls below are needed.
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.autoresizingMask = ( UIViewAutoresizingFlexibleWidth || UIViewAutoresizingFlexibleHeight );
for(UIView *view in self.subviews){ //****i do this to remove a UIActivityIndicatorView which is placed until the image is completely fetched
[view removeFromSuperview];
}
[self addSubview:imageView];
imageView.frame = self.bounds;
[imageView setNeedsLayout];
[self setNeedsLayout];
[data release]; //don't need this any more, its in the UIImageView now
data=nil;}
это работает нормально, если я не загружаю UItableView в фоновом режиме.то есть когда я не делаю
[self performSelectorInBackground:@selector(loadTableData) withObject:nil];
Но когда я загружаю таблицу в фоновом режиме, методы connection: didReceiveData: и connectionDidFinishLoading: никогда не вызываются.Но он начинает работать должным образом, когда я прокручиваю вниз несколько ячеек.
Надеюсь, я все правильно объяснил здесь.Я полностью запутался в этом.Извините за грязный код.Я супер нуб в этом.