无法访问appDelegate NSMutableArray但我可以访问和修改appDelegate int

时间:2012-07-23 01:06:01

标签: objective-c ios xcode delegates

我的appDelegate中有两种类型的var:int和NSMutableArray 我可以访问viewController中的int var但无法访问NSMutableArray

以下是代码:

appDelegate.h

#import <UIKit/UIKit.h>  
@interface AppDelegate : UIResponder <UIApplicationDelegate,NINetworkImageViewDelegate,FBSessionDelegate, FBDialogDelegate> 
{
    UIWindow *window;
    UINavigationController *navController;
    int nbNewsNonLues;
    NSMutableArray *tableauNews;

}
@property (strong, nonatomic) NSMutableArray *tableauNews;
@property (nonatomic) int nbNewsNonLues;
@end

这些var在AppDelegate.m(已检查过)中初始化

然后我尝试在ViewController.m中使用此代码访问它们

@synthesize appDelegate = _appDelegate;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
        NSLog(@"%@", appDelegate.tableauNews);
        NSLog(@"%d", appDelegate.nbNewsNonLues);
        NSLog(@"%@", appDelegate);
    }
    return self;
}

日志返回

2012-07-23 02:58:21.475 Aviso_0.1 [2990:11303](null)

2012-07-23 02:58:25.432 Aviso_0.1 [2990:11303] 2

2012-07-23 02:58:25.432 Aviso_0.1 [2990:11303]

所以我无法访问tableauNews但我可以访问和修改nbNewsNonlues ??

我知道这是一个菜鸟问题,但我阅读并用谷歌搜索了几个小时,我一定错过了关于代表团的事情

需要帮助,

1 个答案:

答案 0 :(得分:1)

这两行不一样:

NSMutableArray *tableauNews;

@property (strong, nonatomic) NSMutableArray *tableauNews;

在第一个中,您创建一个名为tableauNews的iVar。在第二个中,您创建了一个名为tableauNews的属性,其中包含一个名为_tableauNews的支持iVar。请注意支持iVar中的得分:_tableauNews。所以你创建了两个不同的对象。当您分配,访问iVar tableauNews和属性self.tableauNews等时,您正在分配,访问两个不同的对象。但iVar _tableauNews与之前提到的属性self.tableauNews相同。为防止将来出现此类错误,惯例是在iVar中添加前缀下划线。

更新以回答评论部分中的问题:

在这一行@synthetise tableauNews = _tableauNews中,您就是为属性(_tableauNews)声明支持iVar(tableauNews)的方式。当您尝试声明相应的tableauNews时,如上所述和.m文件中声明属性@synthesize tableauNews,Xcode会自动建议将得分较低的版本(_tableauNews)作为支持iVar for你不需要在头文件的iVars声明部分声明它(_tableauNews)。但是,您可以将您的财产与您自己的支持iVar相关联。例如,如果在头文件中声明了一个名为tableauNewsTest的iVar,那么理论上你可以在.m文件@synthesize tableauNews = tableuNewsTest中执行此操作。但不建议这样做。