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 的自定义键盘扩展通信在设备中不工作但在模拟器中工作

UIBlurEffect 在设备上不模糊但在模拟器中工作

CoreLocation 应用程序在模拟器中工作但不在设备上

iOS 4.3 模拟器 Localization.strings 在法语中工作,但不是英语

应用程序在模拟器上部署失败,但预览器在 Xamarin 中工作......我不知道出了啥问题?