NSKeyedArchiver 在模拟器中工作,但不在设备中,iOS SDK
Posted
技术标签:
【中文标题】NSKeyedArchiver 在模拟器中工作,但不在设备中,iOS SDK【英文标题】:NSKeyedArchiver working in Simulator but not Device, iOS SDK 【发布时间】:2012-02-27 00:39:29 【问题描述】:我尝试对其进行一些修改,并查看了此处的其他选项并搜索了一些东西,但似乎没有任何效果。
这就是我所拥有的,就像我说的那样,它在模拟器中完美运行,但在设备中运行良好,女巫运行 ios 5.x 我感谢所有的帮助。
NSFileManager *filemgr;
NSString *docsDir;
NSArray *dirPaths;
filemgr = [NSFileManager defaultManager];
// Get the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
//Build the path to the data file
datafilePath = [[NSString alloc] initWithString: [docsDir
stringByAppendingPathComponent: @"data.archive"]];
// NSString *localPath = @"Documents/data.archive";
// datafilePath = [NSHomeDirectory() stringByAppendingPathComponent:localPath];
// Check if the file already exists
if ([filemgr fileExistsAtPath: datafilePath])
NSMutableArray *dataArray;
// NSDictionary *stuff;
dataArray = [NSKeyedUnarchiver
unarchiveObjectWithFile: datafilePath];
for(int i=0; i< [dataArray count]; i++)
titlestring = [dataArray objectAtIndex:i ];
detailsstring = [dataArray objectAtIndex:++i];
// date = [dataArray objectAtIndex:2];
[tabledata addObject:titlestring];
[tablesubtitles addObject:detailsstring];
这是 saveButton 操作: 就像我说的,我在模拟器中工作正常,只是在设备中什么也没做,一切都显示为空白。
if (i == 0)
// [userDefaults setObject:titlefield.text forKey: @"titlehomework"];
// [userDefaults setObject:detailstextfield.text forKey:@"detailshomework"];
NSMutableArray *contactArray;
contactArray = [NSKeyedUnarchiver
unarchiveObjectWithFile: datafilePath];
// contactArray = [[NSMutableArray alloc] init];
[contactArray addObject:titlefield.text];
[contactArray addObject:detailstextfield.text];
[NSKeyedArchiver archiveRootObject:
contactArray toFile:datafilePath];
// NSDictionary *stuff;
【问题讨论】:
检查this是否有帮助。 如果您能准确描述 what 不起作用,将会很有帮助。告诉我们您认为应该发生的事情、实际发生的事情以及您迄今为止所做的尝试。 我已经看过了,但我的头没有绕过它,还有其他选择吗?感谢您的帮助 编码代码也会有帮助。 好的,我想我没有创建文件,datafilePath 是否也创建了文件?将尽快编辑,但这基本上就是我所拥有的,我应该在委托中创建文件吗? 【参考方案1】:在不知道什么问题的情况下很难回答这个问题,但它可能会帮助您知道,当人们在模拟器上而不是在设备上运行代码时,问题与文件名有关。 iOS 中的文件系统区分大小写,但 MacOS X 文件系统通常不区分大小写。因此,如果您尝试读取名称为“data.archive”的文件,但实际文件的名称为“Data.archive”,它将在模拟器上工作,但在设备上无效。
【讨论】:
对,但是我在代码中创建文件,手机会自动将文件名大写吗? Caleb 的意思是,如果您将文件保存为 data.archive 并将其作为 Data.archive 读取,它将在模拟器中工作,但在实际设备上不起作用。以上是关于NSKeyedArchiver 在模拟器中工作,但不在设备中,iOS SDK的主要内容,如果未能解决你的问题,请参考以下文章
Firebase pubsub 函数在模拟器中工作,但在生产中不会立即返回
与 Host App 的自定义键盘扩展通信在设备中不工作但在模拟器中工作
CoreLocation 应用程序在模拟器中工作但不在设备上