0

我在应用程序委托中使用 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);

}
4

1 回答 1

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一行可以确保实例变量是正确的,显式声明的实例变量也是多余的。

于 2013-05-26T13:25:11.050 回答