Доступ к переменной массива AppDelegate.m из другого ViewController.m - PullRequest
0 голосов
/ 29 января 2011

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

Я хочу сохранить в моем AppDelegate таблицу, сгенерированную анализатором Rss, чтобы она не была необходимойчтобы сделать это снова каждый раз, когда загружается viewcontroller, который отображает список, для этого у меня есть следующий код:

AppDelegate.h

#import <Three20/Three20.h>

#import "NewsRssParser.h"
#import "NewsRss.h"

@class NewsRssParser;
@class NewsRss;

@interface AppDelegate : NSObject <UIApplicationDelegate,NewsRssParserDelegate> {
    NewsRssParser * _rssParser; 
    NSMutableArray * _newsRssArray;
}

@property(readwrite, retain) NewsRssParser * rssParser;
@property(readwrite, retain) NSMutableArray * newsRssArray;

@end

ApDelegate.m

[...]

@ реализация AppDelegate

@ synthesize rssParser = _rssParser;@synthesize newsRssArray = _newsRssArray;

[...]

На определенном этапе выполнения приложения таблица правильно заполняется анализатором Rss.Когда это происходит, я хочу преобразовать его в формат, который можно отобразить в другом контроллере представления:

  • (void) myFunction {

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

    для (NewsRss * rssItem в self.rssParser.rssItems) {NSString * rssItemTitle = [rssItem title];NSString * rssItemAuthor = [@ "par" stringByAppendingString: [автор rssItem]];NSString * rssItemDescription = [описание rssItem];NSString * rssItemLinkUrl = [rssItem linkUrl];NSString * rssItemImageUrl = [rssItem mediaUrl];

    TTTableMessageItem *tMsgItem = [TTTableMessageItem itemWithTitle:rssItemTitle caption:rssItemAuthor text:rssItemDescription timestamp:nil imageURL:rssItemImageUrl URL:rssItemLinkUrl];
    [self.newsRssArray addObject:tMsgItem];
    [dsItems addObject:tMsgItem];
    

    }

}

Я контролировал, что это работает, показывая [_newsRssArray count] вGDB с NSLog.Возвращает 10, то есть количество статей, которые у меня есть в моей ленте RSS.

Это когда я хочу загрузить свой ViewController, чтобы показать список статей.Я делаю это так:

NewsVc.h

#import <Three20/Three20.h>

@protocol NewsVcDelegate;

@class AppDelegate;

@interface NewsVc : TTTableViewController {
    id<NewsVcDelegate> _delegate;

    AppDelegate * _appDelegate;
}

@property(nonatomic,assign) id<NewsVcDelegate> delegate;
@property(nonatomic, retain) AppDelegate * appDelegate;

@end

@protocol NewsVcDelegate <NSObject>

- (void)NewsVc:(NewsVc*)controller didSelectObject:(id)object;

@end

NewsVc.m

[...]

- (void)loadNewsFromParser {

    self.tableView.allowsSelection = NO;

    //reload the table view
    TTListDataSource *ds = [[TTListDataSource alloc] autorelease];
    //NSMutableArray *dsItems = [[[NSMutableArray alloc] init] autorelease];

    NSLog(@"NewsVC(loadNewsFromParser):count/newsRssArray=%d", [self.appDelegate.newsRssArray count]);
    NSLog(@"NewsVC(loadNewsFromParser):count/rssItems=%d", [self.appDelegate.rssParser.rssItems count]);

    [ds initWithItems:self.appDelegate.newsRssArray];

    self.dataSource = ds;
    self.tableView.allowsSelection = YES;

}

[...]

Но вЭта функция ViewController, я вижу массив пустой, а также, когда я пытаюсь получить доступ непосредственно к проанализированным данным NewsRss.Что плохого в моем коде AppDelegate / NewsVc, чтобы иметь доступ к этому массиву из NewsVc?

Спасибо за вашу помощь!Я чувствую себя очень медленно сегодня застрял на этом ...

1 Ответ

5 голосов
/ 29 января 2011

Где вы назначаете appDelegate? Где-то должна быть строка где-то в инициализации контроллера вашего представления:

self.appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...