0

我的 appDelegate 中有 2 种类型的 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??

我知道这是一个菜鸟问题,但我阅读并搜索了几个小时,我一定错过了关于委派的一些事情

需要帮助,

4

1 回答 1

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为属性 ( tableauNews) 声明支持 iVar() 的方式。当您像上面那样声明属性tableauNews时,当您尝试声明相应的 .m 文件时@synthesize tableauNews,Xcode 会自动为您建议低于分数版本 ( _tableauNews) 作为支持 iVar,因此您无需_tableauNews在 iVars 声明中声明它 ( )头文件的部分。但是,您可以将您的财产与您自己的支持 iVar 相关联。例如,如果您在头文件中声明了一个 iVar 调用tableauNewsTest,那么理论上您可以在 .m 文件中执行此操作@synthesize tableauNews = tableuNewsTest。但不建议这样做。

于 2012-07-23T02:12:27.833 回答