Загрузка данных в TTTableViewController внутри UITabBarController - PullRequest
0 голосов
/ 07 ноября 2010
#import "HeadlinesController.h"
#import "DDXML.h"

@implementation HeadlinesController

- (id)init
{
    if(self = [super init]) {
        self.title = @"Headlines";
        self.tabBarItem.image = [UIImage imageNamed:@"166-newspaper.png"];
        self.variableHeightRows = YES;

        self.dataSource = nil;

        [self requestAction];
    }

    return self;
}

- (void)requestAction
{
       TTURLRequest *request = [TTURLRequest requestWithURL:@"http://some.rss" delegate:self];

       request.response = [[[TTURLDataResponse alloc] init] autorelease];
       request.httpMethod = @"GET";
       [request send];
}

#pragma mark -
#pragma mark TTURLRequestDelegate

- (void) requestDidStartLoad:(TTURLRequest *)request
{
    // do nothing for now
}

- (void) requestDidFinishLoad:(TTURLRequest *)request
{
    TTURLDataResponse *response = (TTURLDataResponse *)request.response;
     //NSLog([[NSString alloc] initWithData:response.data encoding:NSUTF8StringEncoding]);
     //NSString *xmlStr = [[NSString alloc] initWithData:response.data encoding:NSUTF8StringEncoding];

     DDXMLDocument *doc = [[DDXMLDocument alloc] initWithData:response.data options:0 error:nil];

     NSArray *resultNodes = nil;
     resultNodes = [doc nodesForXPath:@"//item[position() <= 10]" error:nil];

     TTListDataSource *ds = [[TTListDataSource alloc] autorelease];
     NSMutableArray *dsItems = [[[NSMutableArray alloc] init] autorelease];

     for(DDXMLElement *resultElement in resultNodes) {
         NSString *itemTitle   = [[[resultElement nodesForXPath:@"title" error:nil] objectAtIndex:0] stringValue];
         NSString *itemLink    = [[[resultElement nodesForXPath:@"link" error:nil] objectAtIndex:0] stringValue];
         NSString *itemDesc    = [[[resultElement nodesForXPath:@"description" error:nil] objectAtIndex:0] stringValue];
         NSString *itemPubDate = [[[resultElement nodesForXPath:@"pubDate" error:nil] objectAtIndex:0] stringValue];

         NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
         [df setDateFormat:@"EEE, dd MMMM yyyy HH:mm:ss Z"];
         NSDate *pubDate = [df dateFromString:itemPubDate];

         TTTableMessageItem *tMsgItem = [TTTableMessageItem itemWithTitle:itemTitle caption:@"" text:itemDesc timestamp:pubDate URL:itemLink];
         [dsItems addObject:tMsgItem];
     }

     [ds initWithItems:dsItems];
     self.dataSource = ds;
}

- (void)request:(TTURLRequest *)request didFailLoadWithError:(NSError *)error
{
     NSLog(@"ERROR: %@", error);
}

@end

У меня есть TTTableViewController в качестве первого вида UITabBarController.Кажется, это прекрасно работает при загрузке таблицы с данными RSS-канала, но когда я добавляю ее в UITabBarController, список никогда не заполняется ничем.Я вывожу данные на консоль, и все они там сбрасываются, но список не заполняется.Кто-нибудь может объяснить, что я делаю не так?

1 Ответ

0 голосов
/ 07 ноября 2010

Хорошо, ребята, это один из тех, кто кодирует DOH!моменты, так что позвольте мне показать вам мой код UITabBarController:

#import "TodayController.h"
#import "HeadlinesController.h"
#import "GalleriesController.h"

@implementation TodayController

- (id)init
{
if(self = [super init]) {
    self.title = @"Today";

    HeadlinesController *headlines = [[HeadlinesController alloc] init];
    GalleriesController *galleries = [[GalleriesController alloc] init];

    [self setViewControllers:[NSArray arrayWithObjects:
                                       headlines,
                                       galleries,
                                       nil]];


    //[self.view addSubview:tabController.view];
}

return self;
}

- (void)dealloc
{
//[tabController release];

[super dealloc];
}

@end

Так что изначально я создавал представление панели вкладок в представлении панели вкладок, то есть в методе init, я делал это:*

UITabBarController *tabBar = [[[UITabBarController alloc] init] autorelease];

и добавление контроллеров подвидов через этот экземпляр.Давайте просто скажем, что мой мозг отсутствовал во второй половине дня.Я не знаю, почему я подумал, что мне нужна еще одна панель вкладок внутри экземпляра панели вкладок.По крайней мере, это хороший пример кода для кого-то начинающего.

...