访问代理数据

时间:2011-06-13 13:43:10

标签: iphone ios4

您好我正在尝试使用标签和导航制作一个简单的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 :(得分:0)

请按照以下步骤进行操作。

//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。

希望它有所帮助。

答案 1 :(得分:0)

问题可能是这一行返回null:

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

当你没有嵌套这么多句子时,代码更容易调试。

您可以从任何地方访问您的代理,因为UIApplication是一个单例,您不需要像self.appDelegate一样保留引用。例如:

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

或者就像詹妮斯所说的那样,谁比我更快,并删除了IBOutlet。 :P

当你这样做时

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

如果跳过第一行,结果是相同的,因为运行时会为您创建它。 见Question about @synthesize。我猜_NewsAppDelegate真的是NewsAppDelegate(没有下划线)。

相关问题