我在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);
}
答案 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
行来确保实例变量是正确的,但是显式声明的实例变量只是多余的。