Arrays 保存iOS应用程序阵列
我想知道如何保存iOS应用程序的阵列。我使用了一种方法,但它只保存在我的iPodtouch上。我在iPad上进行了测试,但没有成功 我需要的是在任何设备上保存我的应用程序阵列的代码 有人能帮我吗 代码如下: myAppViewController.h:Arrays 保存iOS应用程序阵列,arrays,ios,save,device,Arrays,Ios,Save,Device,我想知道如何保存iOS应用程序的阵列。我使用了一种方法,但它只保存在我的iPodtouch上。我在iPad上进行了测试,但没有成功 我需要的是在任何设备上保存我的应用程序阵列的代码 有人能帮我吗 代码如下: myAppViewController.h: - (NSString *)GetApplicationDocumentsDirectory; - (void)applicationWillTerminate:(NSNotification *)notification; myAppView
- (NSString *)GetApplicationDocumentsDirectory;
- (void)applicationWillTerminate:(NSNotification *)notification;
myAppViewController.m:
-(NSString*) GetApplicationDocumentsDirectory {
static NSString* documentsDirectory = nil;
if (documentsDirectory == nil) {
documentsDirectory = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES)
objectAtIndex:0] retain];
}
NSString *fullFileName = [NSString stringWithFormat:@"%@/TarefasSalvas.plist", documentsDirectory];
return fullFileName;
}
- (void)applicationWillTerminate:(NSNotification *)notification{
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:lisTitulos];
[array addObject:lisImagens];
[array addObject:lisData];
[array addObject:lisDetalhes];
[array writeToFile:[self GetApplicationDocumentsDirectory] atomically:YES];
}
- (void)viewDidLoad {
[super viewDidLoad];
NSString *filePath = [self GetApplicationDocumentsDirectory];
//if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:filePath];
if (array != nil){
lisTitulos = [array objectAtIndex:0];
lisImagens = [array objectAtIndex:1];
lisData = [array objectAtIndex:2];
lisDetalhes = [array objectAtIndex:3];
}
else {
NSDate *date = [NSDate date];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setLocale:[NSLocale currentLocale]];
[dateFormat setDateFormat:@"dd/MM/YYYY"];
NSString *dateNow = [dateFormat stringFromDate:date];
lisTitulos = [[NSMutableArray alloc] initWithObjects:@"Titulo",nil];
lisImagens = [[NSMutableArray alloc] initWithObjects:@"0.png",nil];
lisData = [[NSMutableArray alloc] initWithObjects:dateNow,nil];
lisDetalhes = [[NSMutableArray alloc] initWithObjects:@"",nil];
}
UIApplication *app = [UIApplication sharedApplication];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:UIApplicationWillTerminateNotification object:app];
}
谢谢您可能只是将应用程序发送到后台,而没有终止它们。在这种情况下,applicationWillTerminate:将不会被调用。这似乎是可能的原因,因为代码的其余部分看起来很好 您的GetApplicationDocumentsDirectory的名称似乎有点奇怪,因为它获取了存储数组的文件的路径。除此之外,
NSString *fullFileName = [NSString stringWithFormat:@"%@/TarefasSalvas.plist", documentsDirectory];
不是获取文件路径的正确方法。您应该像这样在documentsDirectory上使用StringByAppendingPathComponent:方法
NSString *fullFileName = [documentsDirectory stringByAppendingPathComponent:@"TarefasSalvas.plist"];
将fullFileName声明为静态变量而不是documentsDirectory也是有意义的。谢谢@Deepak。
在你告诉我调试时发出日志警报的提示后,我注意到iPad正在关闭应用程序,然后应用程序无法调用应用程序WillTerminate:方法,正如你前面提到的。
因此,我解决了将代码更改为:
- (void)applicationWillTerminate:(NSNotification *)notification{
[self SavingStatus];
}
-(void)SavingStatus {
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:lisTitulos];
[array addObject:lisImagens];
[array addObject:lisData];
[array addObject:lisDetalhes];
[array writeToFile:[self GetApplicationDocumentsDirectory] atomically:YES];
}
如您所见,我创建了一个在applicationWillTerminate:method上调用的方法,每次应用程序重新加载表数据时:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
...
[self SavingStatus];
return cell;
}
通过这种方式,即使您的设备在应用程序正常关闭之前将其关闭,信息仍将被保存=D
再次感谢@Deepak
还有所有回复我的人。你能告诉我们,到目前为止,你用一些代码和一个例子做了些什么吗?你的iOS应用程序数组是什么?你到底想保存什么,在什么地方、什么时候、用什么测试来确定你的尝试是否有效?谢谢你的回复,但不幸的是,它仍然无法在ipad上保存=/你确定该方法被调用了吗?And writeToFile:atomically:方法在失败时返回NO。你应该检查它返回的内容。我注意到,当我在iPad上运行应用程序时,当我关闭应用程序时,Xcode屏幕底部显示:GDB:数据格式化程序暂时不可用,将在继续后重试。此时调用dlopen不安全。似乎与内存问题有关。您是否尝试分析该应用程序?您是否确定是否调用了该方法以及写入是否成功?如果不是,则向applicationWillTerminate:方法添加NSLog语句。放NSLog@method打电话;并使用BOOL result=[array writeToFile:[self-getapplicationdocumentsddirectory]原子方式捕获写入操作的结果:YES];然后添加NSLog@%d,结果;直到方法的末尾。