我的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 ??
我知道这是一个菜鸟问题,但我阅读并用谷歌搜索了几个小时,我一定错过了关于代表团的事情
需要帮助,
答案 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
中执行此操作。但不建议这样做。