【问题标题】:Importing text files into an iOS App将文本文件导入 iOS 应用程序
【发布时间】:2013-08-08 04:25:03
【问题描述】:

我注意到,当使用
writeToFile:myFile atomically:YES

从 iOS 应用程序保存文件时

生成的文件实际上是以 XML 格式保存的,并且总是有以下代码:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <string>Sentence 1</string>
    <string>Sentence 2</string>
    <string>Sentence 3</string>
    <string>Sentence 4</string>
</array>
</plist>

所以它总是采用 XML/Plist 格式。

但是,如果我尝试将一个文本文件导入到应用程序中,该文本文件不是从 iOS 应用程序创建的 - 它似乎不知道如何识别它。

例如,如果我将在 TextEdit 中创建的纯文本文件拖到我的应用程序的 Documents 文件夹中,然后再次运行应用程序,应用程序看到这个新文件,但是当我尝试使用以下方法加载其内容: initWithContentsOfFile:myFile
我得到的结果是:(null)

这是因为在 TextEdit 中创建的文件的默认格式是“.rtf”吗?或者我应该使用完全不同的方法将纯文本文件读入应用程序,而不是 initWithContentsOfFile:myFile?

最终,我希望该应用程序能够加载现有的文本文件 - 甚至可能是 Microsoft WORD 文件 - 并使用它们。我希望用户将他们现有的文件拖到 iTunes 中的应用程序文件夹中,然后将他们的设备与 iTunes 同步 - 然后将这些新文件复制到设备上,当他们再次运行他们的应用程序时,应用程序将看到新文件并能够打开它们并读取它们的内容。

有什么建议吗?

【问题讨论】:

    标签: iphone objective-c import sync initwithcontentsoffile


    【解决方案1】:

    你提到了writeToFile:atomically: 方法,但你没有告诉我们这个方法是在哪个类上调用的。例如,NSStringNSArrayNSDictionary 和其他类都有一个具有此名称的方法,并且它们的行为都不同,正如在不同类型的数据结构中所期望的那样。

    从上面的文件输出中,您可能会在 NSArray 上调用它,这就是它以 Plist 格式编写的原因。我向您保证,如果您使用NSString,字符串会被清楚地写入,例如:

    NSString *s = @"A string";
    [s writeToFile:path atomically:YES];
    

    将生成一个文件:

    A String
    

    您可能希望在将各种其他数据结构写入文件之前将其转换为字符串。

    【讨论】:

    • 好的,我不知道其他类也有 writeToFile:atomically: 方法 - 或 initWithContentsOfFile 方法。很高兴知道:-) 你是对的:我使用的是 NSArray 的保存方法。刚才我尝试使用 NSString 的 initWithContentsOfFile 方法读取在 TextEdit 中创建的纯简文本文件 - 它有效(意味着我没有得到 '(null)') - 这很棒。接下来,我尝试阅读使用 TextEdit 创建的 RTF 文件,该文件也有效,但我得到了很多垃圾字符,例如:{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf390 - 知道如何摆脱这些吗?
    • 那些不是垃圾字符 - 这些是 RTF 代码。见en.wikipedia.org/wiki/Rich_Text_Format
    • 是的,我知道它们不是垃圾——我知道 RTF 是什么——这就是为什么我首先特别尝试将这样的文件测试加载到应用程序中,看看如何/如果它将处理其所有格式代码/字符(“垃圾”:-))——这让我重复了这个问题:你知道如何删除这些字符或以某种方式将 rtf 文件转换为纯文本文件吗? ,在运行时?有可能吗?
    • 对不起,我没有。可能最好将其作为一个不同的问题发布。
    猜你喜欢
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多