如何在App委托中将对象存储到NSmutablearray?

时间:2013-05-26 12:51:34

标签: xcode nsmutablearray

我在app delegate中使用NSmutable数组存储和访问对象时遇到问题。我已尝试过形成其他网站和叠加页面的方法,但还没有解决方案。我希望能够在另一个视图中访问数组数据。目前没有什么对我有用。

继承我的代码。

AppDelegate.h :


@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    NSMutableArray* sharedArray;
}

@property (nonatomic, retain)  NSMutableArray* sharedArray;


ViewController.h :


#import "AppDelegate.h"

-(void)viewDidLoad{

 AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
            NSMutableArray *model = appDelegate.sharedArray;

            NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
            [dict setObject:@"hello" forKey:@"title"];

            [dict setObject:@"urlhere" forKey:@"thumbnail"];


            [model addObject:dict];


            NSLog(@"submitted to array: %@",model);

}

1 个答案:

答案 0 :(得分:1)

您是否在任何时候初始化sharedArray?必须先实例化该数组,然后才能向其中添加对象。例如:

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    self.sharedArray = [NSMutableArray array];

    return YES;
}

完成此操作后,现在尝试从视图控制器向此阵列添加对象应该会成功。


不相关,但您应该为您的属性定义实例变量。让编译器为你合成,例如:

AppDelegate.h:

@interface AppDelegate : UIResponder <UIApplicationDelegate>
// {
//     NSMutableArray* sharedArray;
// }

@property (nonatomic, retain)  NSMutableArray* sharedArray;

@end

你所拥有的是技术上可接受的,但由于这个sharedArray实例变量与编译器将为你合成的内容之间可能存在混淆(例如,如果你没有@synthesize行,这是不可取的,编译器会自动为你创建一个名为_sharedArray的实例变量,带有一个前导下划线。即使你有一个@synthesize行来确保实例变量是正确的,但是显式声明的实例变量只是多余的。