【发布时间】:2013-09-02 20:43:42
【问题描述】:
当应用程序处于后台模式或应用程序关闭时,我有一个 cartArray(在上面的 AppDelegate.h @interface 中)需要保存。当我在其中添加一个项目(购物车)并进入后台或通过按减号关闭应用程序时,cartArray 什么都没有但崩溃时,该应用程序运行良好。我的 cartArray 中包含购物车类。 我可以知道发生了什么吗?网上的教程太复杂了,我总是发现自己在解释中迷失了。
[AppDelegate.m]
- (void)applicationDidEnterBackground:(UIApplication *)application {
[AppDelegate saveData];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
[AppDelegate getData];
}
+(NSString *) getPathToAchieve{ NSLog(@"+++++getPathToAchieve");
static NSString* docsDir = nil;
if (docsDir == nil) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [paths objectAtIndex:0];
}
NSString *fullFileName = [NSString stringWithFormat:@"%@.plist", docsDir];
return fullFileName;
}
- (void)applicationWillTerminate:(NSNotification *)notification{
[cartArray writeToFile:[AppDelegate getPathToAchieve] atomically:YES];
}
-(id)initWithCoder:(NSCoder *)aDecoder
{ self = [super init];
if (self != nil)
{
cartArray = [aDecoder decodeObjectForKey:@"cartArrayKeys"];
}
return self;
}
-(void)encodeWithCoder:(NSCoder *)anEncoder
{
[anEncoder encodeObject:cartArray forKey:@"cartArrayKeys"];
}
+(void)saveData{
[NSKeyedArchiver archiveRootObject:cartArray toFile:[self getPathToAchieve] ];
}
+(id)getData{
return [NSKeyedUnarchiver unarchiveObjectWithFile:[self getPathToAchieve]];
}
【问题讨论】:
-
您能否将崩溃日志添加到您的问题中?
-
看起来很糟糕的设计。在这种情况下,我建议您使用 CoreData。您不必担心数据是否已保存 - CoreData 会妥善处理。
-
CoreData中不需要,只有一个数组。首选NSDefaults
标签: iphone ios objective-c save