如何保存iPhone应用程序多个视图中的数据?
如何保存iPhone应用程序多个视图中的数据?
我正在制作一个应用程序,在应用程序退出时需要保存应用程序中多个视图中的文本。我还需要能够从这些视图中的一个视图中删除所有数据,而且当应用程序退出时,可能还没有创建所有这些视图。
阅读了这篇帖子后,我认为使用一个管理我的应用程序数据的单例可能是个不错的选择,它在首次请求数据时加载数据,并在应用程序退出时保存数据。然后,在每个需要保存数据的视图中,我可以直接在单例上设置它。
我尝试了一下,但遇到了一些问题。起初,我没有合成属性(就像我参考的帖子中一样),但编译器告诉我需要创建getter和setter,所以我就创建了。现在,当我的applicationWIllTerminate:被调用时,应用程序崩溃了,控制台显示"Program received signal: “EXC_BAD_ACCESS”. kill quit"。
有人能告诉我我做错了什么,或者提出更好的保存数据的方法吗?
//SavedData.h
#import#define kFileName @"appData.plist" @interface SavedData : NSObject { NSString *information; NSString *name; NSString *email; NSString *phone; NSString *mobile; } @property(assign) NSString *information; @property(assign) NSString *name; @property(assign) NSString *email; @property(assign) NSString *phone; @property(assign) NSString *mobile; + (SavedData *)singleton; + (NSString *)dataFilePath; + (void)applicationWillTerminate:(NSNotification *)notification; @end
//SavedData.m
#import "SavedData.h" @implementation SavedData @synthesize information; @synthesize name; @synthesize email; @synthesize phone; @synthesize mobile; static SavedData * SavedData_Singleton = nil; + (SavedData *)singleton{ if (nil == SavedData_Singleton){ SavedData_Singleton = [[SavedData_Singleton alloc] init]; NSString *filePath = [self dataFilePath]; if([[NSFileManager defaultManager] fileExistsAtPath:filePath]){ NSMutableArray * array = [[NSMutableArray alloc] initWithContentsOfFile:filePath]; information = [array objectAtIndex:0]; name = [array objectAtIndex:1]; email = [array objectAtIndex:2]; phone = [array objectAtIndex:3]; mobile = [array objectAtIndex:4]; [array release]; } UIApplication *app = [UIApplication sharedApplication]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:UIApplicationWillTerminateNotification object:app]; } return SavedData_Singleton; } + (NSString *)dataFilePath{ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *DocumentsDirectory = [paths objectAtIndex:0]; return [DocumentsDirectory stringByAppendingPathComponent:kFileName]; } + (void)applicationWillTerminate:(NSNotification *)notification{ NSLog(@"Application will terminate received"); NSMutableArray *array = [[NSMutableArray alloc] init]; [array addObject:information]; [array addObject:name]; [array addObject:email]; [array addObject:phone]; [array addObject:mobile]; [array writeToFile:[self dataFilePath] atomically:YES]; [array release]; } @end
然后当我想要使用它时,我这样做:
myLabel.text = [SavedData singleton].information;
当我更改字段时,我这样做:
[SavedData singleton].information = @"my string";
非常感谢任何帮助!