我的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](空)

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?

我知道这是一个菜鸟问题,但我已经阅读并在Google上搜索了好几个小时,肯定有关于授权问题的遗漏

需要帮助,

最佳答案

这两行不同:

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的后盾,因此您不需要在头文件的iVars声明部分中声明它(_tableauNews)。但是,您可以将资产与自己的支持iVar相关联。例如,如果在头文件中声明了名为tableauNewsTest的iVar,则理论上可以在.m文件@synthesize tableauNews = tableuNewsTest中执行此操作。但是不建议这样做。

关于objective-c - 无法访问appDelegate NSMutableArray,但我可以访问和修改appDelegate int,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11605333/

10-12 14:38