Доступ к данным делегата - PullRequest
0 голосов
/ 13 июня 2011

Здравствуйте, я пытаюсь создать простое приложение для ios с вкладками и навигацией.

в делегате у меня есть следующий тип:

BlogRss * _currentlySelectedBlogItem;

с этим свойством:

@property (readwrite,retain) BlogRss * currentlySelectedBlogItem;

и я пытаюсь получить его данные с помощью двух других классов: один представляет собой табличное представление с данными, а другой покажет данные; в обоих классах я объявил следующее:

@class NewsAppDelegate;
NewsAppDelegate * _appDelegate;
@property (nonatomic, retain) IBOutlet _NewsAppDelegate * appDelegate;
@synthesize appDelegate = _appDelegate;

часто "касаясь" ячейки в табличном представлении, я написал это:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
        [[self appDelegate] setCurrentlySelectedBlogItem:[[[self rssParser]rssItems]objectAtIndex:indexPath.row]];

    // Navigation logic may go here. Create and push another view controller.
  //  [[self appDelegate] loadNewsDetails];

     NewsDetailViewController *detailViewController = [[NewsDetailViewController alloc] initWithNibName:@"NewsDetailViewController" bundle:nil];

     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     [detailViewController release];

}

когда я пишу в другом классе:

NSLog(@"%@",self.appDelegate.currentlySelectedBlogItem);

Я получаю ноль.

ясно, что я делаю что-то не так, но я не знаю, что ...

Ответы [ 2 ]

0 голосов
/ 13 июня 2011

Возможно, проблема в том, что эта строка возвращает ноль:

[[[self rssParser]rssItems]objectAtIndex:indexPath.row]

Код легче отлаживать, если вы не вкладываете столько предложений.

Вы можете получить доступ к своему делегату из любого места, потому что UIApplication является одноэлементным, вам не нужно сохранять ссылку, как вы делаете с self.appDelegate. Пример:

(NewsAppDelegate *)[[UIApplication sharedApplication] delegate];

Или просто сделайте, как предлагает Дженнис, который быстрее меня, и удалите IBOutlet. : Р

Когда вы делаете

NewsAppDelegate * _appDelegate;
@property (nonatomic, retain) IBOutlet _NewsAppDelegate * appDelegate;
@synthesize appDelegate = _appDelegate;

Результат тот же, если вы пропустите первую строку, потому что среда выполнения создаст ее для вас. См. Вопрос о @ synthesize . И я предполагаю, что _NewsAppDelegate действительно является NewsAppDelegate (без подчеркивания).

0 голосов
/ 13 июня 2011

Пожалуйста, сделайте следующее.

//Your Header File 
#import "YourAppDelegate.h"

@interface YourViewController : UIViewController
{
    YourAppDelegate *appDelegate;
}

@property(nonatomic,retain) YourAppDelegate *appDelegate;

@end

//Your Implementation file
@implementation YourViewController
@synthesize appDelegate

- (void)viewDidLoad {
    self.appDelegate = (YourAppDelegate*) [[UIApplication sharedApplication] delegate];
}

@end

После объявления выше, у вас будет доступ к appDelegate в любом месте вашего контроллера представления.

Надеюсь, это поможет.

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