2012-07-23 68 views
0

我有2种变种在我的appDelegate:int和NSMutableArray的 我可以在我的viewController访问INT无功,但不能访问的NSMutableArray不能访问的appDelegate NSMutableArray的,但我可以访问和修改的appDelegate INT

下面是代码:

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 

这些变种在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(空)

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,但我可以接受ss和修改nbNewsNonlues ??

我知道这是一个noob问题,但我阅读和google搜索了几个小时,必须有smthing我错过了有关代表团

需要帮助,

+0

你在哪里设置'tableauNews'的值?你可以发布该代码吗? – 2012-07-23 01:12:28

+0

你在哪里实际分配/初始化数组? – borrrden 2012-07-23 01:14:35

+0

您是否在AppDelegate.m中合成tableauNews? – 2012-07-23 01:17:21

回答

1

这两条线是不一样的:

NSMutableArray *tableauNews; 

@property (strong, nonatomic) NSMutableArray *tableauNews; 

在第一个中,创建一个名为tableauNews的iVar。在第二个中,您创建一个名为tableauNews的属性,并使用名为_tableauNews的支持iVar。请注意支持iVar中的得分不足:_tableauNews。所以你创建了两个不同的对象。当您分配,访问等iVar tableauNews和属性self.tableauNews时,您正在分配,访问两个不同的对象。但是,iVar _tableauNews与前面提到的属性self.tableauNews是一样的。为了避免将来出现这种类型的错误,约定是在您的iVar中添加前缀下划线。

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

在这一行​​,那你是怎么申报的财产(tableauNews)背伊娃(_tableauNews)。如果您声明tableauNews属性如上所述,并且在尝试声明相应@synthesize tableauNews时在.m文件中声明,则Xcode会自动建议将得分不足版本(_tableauNews)作为您的后备iVar,因此您无需声明它(_tableauNews)在头文件的iVars声明部分。然而,您可以将您的财产与您自己的支持iVar相关联。例如,如果在头文件中声明了名为tableauNewsTest的iVar,那么理论上可以在.m文件@synthesize tableauNews = tableuNewsTest中执行此操作。但不推荐。

+0

好吧,所以如果我做这样的事情:tableauNews = blabla - >我使用的财产,如果我使用self.tableauNews或_tableauNews,这是属性。我经常看到@synthetise tableauNews = _tableauNews,有什么用? thx为您的答案 – Abzamon 2012-07-23 09:27:46

+0

看到更新回答。在评论部分格式化很容易。 – user523234 2012-07-23 13:10:04

+0

为什么@synthesize'tableauNews = tableuNewsTest'不推荐?如果我明白这会让我无差别地使用'tableauNews'和'self.tableauNews'。 – Abzamon 2012-07-23 13:51:04