Вероятно, это глупый вопрос с простым ответом.Я новичок в разработке для iOS, и это убивает меня.
У меня есть базовое приложение панели вкладок.Приложение загружает начальную вкладку при запуске, и это контроллер таблицы.Данные для этого табличного представления предоставляются контроллером данных, где он создает массив из данных, извлеченных из Интернета.Когда я впервые запускаю приложение, в табличном представлении ничего не отображается, оно пустое.Однако, если я выберу другую вкладку и затем вернусь к этой вкладке, данные теперь там и отображаются в виде таблицы, как и должно быть.Как мне получить данные для отображения в первый раз?Это очевидно там.Я полагаю, что это может быть связано с тем, где / когда данные загружаются, что вызывает проблему, любое понимание было бы здорово.
Это устанавливает контроллер данных в делегате приложения:
// Create Locations data controller.
LocationDataController *controller = [[LocationDataController alloc] init];
self.locationDataController = controller;
[controller release];
locationsViewController.locationDataController = locationDataController;
Вот код контроллера данных:
@implementation LocationDataController
@synthesize fetchConnection = mFetchConnection;
@synthesize locations, tempLocations;
-(id)initData {
if (self = [super init]) {
[self createData];
}
return self;
}
-(id)init {
[self fetchData];
return self;
}
-(unsigned)countOfList {
return [locations count];
}
-(Location *)objectInListAtIndex:(unsigned)theIndex {
return [locations objectAtIndex:theIndex];
}
-(void)dealloc {
[locations release];
if (mFetchConnection != nil) {
[mFetchConnection cancel];
[mFetchConnection release];
}
if (mFetchConnectionBuffer != nil)
[mFetchConnectionBuffer release];
[super dealloc];
}
#pragma mark -
#pragma mark Fetching/Sending Data
#pragma mark
- (void)fetchData {
if (mFetchConnection == nil) {
if (mFetchConnectionBuffer != nil)
[mFetchConnection release];
mFetchConnectionBuffer = [[NSMutableData alloc] init];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:kFetchURLPath]];
self.fetchConnection = [[[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES] autorelease];
[request release];
}
}
#pragma mark -
#pragma mark NSURLConnection Delegate
#pragma mark
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)inData {
if (connection == mFetchConnection) {
[mFetchConnectionBuffer appendData:inData];
}
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)connectionError {
if (connection == mFetchConnection) {
self.fetchConnection = nil;
[mFetchConnectionBuffer release];
mFetchConnectionBuffer = nil;
}
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
tempLocations = [[NSMutableArray alloc] init];
if (connection == mFetchConnection) {
NSString *str = [[NSString alloc] initWithData:mFetchConnectionBuffer encoding:NSUTF8StringEncoding];
SBJSON *parser = [[SBJSON alloc] init];
id result = [parser objectWithString:str error:nil];
if (result != nil && [result isKindOfClass:[NSArray class]])
[tempLocations setArray:result];
[str release];
[mFetchConnectionBuffer release];
mFetchConnectionBuffer = nil;
self.fetchConnection = nil;
[self initData];
}
}
-(void)createData {
// Cycle through array to implement locations.
Location *location;
NSMutableArray *array = [[NSMutableArray alloc] init];
// create arry of locations.
for (int i=0; i<[tempLocations count];i++) {
location = [[Location alloc] init];
location.name = [[tempLocations objectAtIndex:i] objectForKey:@"name"];
location.address = [[tempLocations objectAtIndex:i] objectForKey:@"address"];
location.city = [[tempLocations objectAtIndex:i] objectForKey:@"city"];
location.state = [[tempLocations objectAtIndex:i] objectForKey:@"state"];
location.zip = [[tempLocations objectAtIndex:i] objectForKey:@"zip"];
[array addObject:location];
[location release];
}
self.locations = array;
[array release];
[tempLocations release];
}