合成的NSMutableArray返回null

时间:2013-05-17 03:02:07

标签: ios objective-c ios6 nsmutablearray synthesize

所以我在appDelegate.h

中声明了这一点
       @property(nonatomic,strong) NSMutableArray *featured;

我在appDelegate.m

中合成了它
       @synthesize featured;

当我在appDelegate中记录那个存储在那里的对象时,我得到它应该具有的值

在viewController.h文件中,我已经声明了这个

       @property(nonatomic,strong) NSMutableArray *featured;

在viewController.m文件中,我像这样合成它

       @synthesize featured;

然后我打印出这一行并获得一个空值

       NSLog(@"HERE %@", featured);

同一行在appDelegate.m文件中打印出正确的值。我完全迷失了。我已经按照我上次课堂练习的方式进行了设置。提前谢谢!

编辑:

我在appDelegate.m文件中创建了数组,就像我在一个名为loadFeatured

的方法中一样
  featured = [NSMutableArray array];

for (id dict in tempArray)
{
    //NSLog(@"dict=%@",dict);

    NSString *shopName = [dict objectForKey:@"shopName"];
    NSString *drinkName = [dict objectForKey:@"drinkName"];
    NSNumber *likes = [dict objectForKey:@"likes"];
    NSNumber *dislikes = [dict objectForKey:@"dislikes"];
    NSString *review = [dict objectForKey:@"review"];        

    Featured *feat = [[Featured alloc] initWithName:shopName drinkName:drinkName likes:likes dislikes:dislikes review:review];
    NSLog(@"feat=%@\n\n",feat);
    [featured addObject:feat];
}

NSLog(@"there is %d featured",[featured count]);
NSLog(@"HERE %@", featured);

4 个答案:

答案 0 :(得分:2)

如果不了解应用程序的结构,很难说如何做到这一点。如果您可以从应用程序委托访问该视图控制器,则可以将指向该数组的指针传递给视图控制器。另一种方法是在视图控制器中获取对app delegate的引用,然后访问其数组。这可以这样做:

AppDelegate *appDel = [UIApplication shared application].delegate;
NSArray *myControllerArray = appDel.featured;

您需要将应用委托导入控制器的.m文件才能使用此方法。

答案 1 :(得分:2)

以下是如何从viewcontroller访问存储在app delegate中的数据的方法。

您无需在viewcontroller中合成对象。只需导入您的appdelegate文件,并在必要时复制以下代码。

NSMutableArray * nArray =[ (AppDelegate*) [[UIApplication sharedApplication] delegate] featured];

上面的代码为您提供了app delegate所需的数组。现在您可以使用nArray对象在控制台中显示详细信息。

NSLog(@"%@",nArray.description);

答案 2 :(得分:2)

由于你已经在appDelegate.h中声明了一个属性,你可以在另一个viewController中访问它,如下所示:

#import "appDelegate.h"

您可以使用以下内容访问该值:

((AppDelegate *)[[UIApplication sharedApplication]delegate]).featured

答案 3 :(得分:1)

如果您需要通过NSArray访问任何课程中的AppDelegate或任何其他对象,只需在{{1}中创建一个属性即可访问ViewController AppDelegate class:

#import "ViewController.h"

@property (nonatomic, strong) AppDelegate *appDelegate;
@property (nonatomic, strong) ViewController *viewController; 

ViewController课程中:

#import "AppDelegate.h"

AppDelegate    *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
ViewController *viewControllerREFERENCE = [appDelegate viewController];

然后,您可以通过AppDelegate访问ViewController上的任何值。 我希望能帮助你。