iphone tab bar app просмотр вопроса о жизненном цикле - PullRequest
1 голос
/ 08 октября 2010

Вероятно, это глупый вопрос с простым ответом.Я новичок в разработке для 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];

}

1 Ответ

0 голосов
/ 09 октября 2010

Предположим, что вы правильно реализовали методы делегата TableView. Я бы посоветовал вам вызвать tableView.reloadData после того, как данные были созданы, чтобы проверить, работает ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...