在 xcode 中使用现有数据编写 plist

Posted

技术标签:

【中文标题】在 xcode 中使用现有数据编写 plist【英文标题】:Writing plist with existing data in xcode 【发布时间】:2014-10-31 07:22:42 【问题描述】:

我可以选择在我的应用中将 plist 文件上传到 iCloud。当应用程序被删除并重新安装时,内容必须保留。这是我一直在尝试的,我从 iCloud 上传/检索没有任何问题。我从云中获取 plist 详细信息作为 NSData。现在的问题是我已经将这些数据写回到我的 plist 已经存在了。

NSArray *paths           = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);

NSString *documentsDir   = [paths objectAtIndex:0];
NSString *root          = [documentsDir stringByAppendingPathComponent:@"Receipts.plist"];

我从云中获取 plist 内容作为 NSData,转换为 NSString 后,这就是我得到的。

<?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>
    <dict>
        <key>Amount</key>
        <string>USD 1500.00</string>
        <key>Category</key>
        <string></string>
        <key>Currency</key>
        <string>USD</string>
        <key>Date</key>
        <string>Thu 30 Oct,2014</string>
        <key>DateSort</key>
        <string>2014/10/30</string>
        <key>Merchant</key>
        <string></string>
        <key>Payment</key>
        <string></string>
        <key>Purpose</key>
        <string>-</string>
        <key>SubCategory</key>
        <string></string>
        <key>TimeStamp</key>
        <string>Thu 30 Oct,2014 14:42:47</string>
        <key>Tips</key>
        <string>0.00</string>
        <key>UDDate1</key>
        <string>Thu 30 Oct,2014</string>
        <key>UDDate2</key>
        <string>Thu 30 Oct,2014</string>
        <key>UDNumber1</key>
        <string>0.00</string>
        <key>UDNumber2</key>
        <string>0.00</string>
        <key>UDNumber3</key>
        <string>0.00</string>
        <key>UDText1</key>
        <string>-</string>
        <key>UDText2</key>
        <string>-</string>
        <key>UDText3</key>
        <string>-</string>
        <key>Uploaded</key>
        <string>upload</string>
        <key>Value</key>
        <string>0</string>
    </dict>
</array>
</plist>

我在写回这个旧内容时发现了问题。如何将这些内容写回这个空的 plist?

【问题讨论】:

我不明白。你能简单解释一下吗? 上述 plist 详细信息是从 iCloud 检索的。当应用程序被删除并重新安装时,我需要将它写在我已经存在的 plist 中。 @user3182143 你想只检查plist是否已经存在吗? 不!我需要将从 iCloud 获取的 plist 内容保存到 plist 文件中。 【参考方案1】:

这可能会有所帮助。您的 plist 是一个数组,因此请将数组保存到文件中。

//read from file
NSArray *array = [NSArray arrayWithContentsOfFile:root];
//wirte to file
NSArray *sourceArray = [NSArray arrayWithContentsOfFile:filePath];
BOOL success = [sourceArray writeToFile:root atomically:YES];

【讨论】:

NSData *fileData = documentData; -> 来自云的 plist 内容在这里。我将其转换为字符串并添加到“arrayWithContentsOfFile”。但没有运气! 您是如何保存文件以及如何将文件上传到 iCloud 的? 你可以试试this example "NSString *filename12 = @"ReceiptorBP.plist";...""NSData *dataReturn = [[NSData alloc] initWithContentsOfFile:root];" ...[self uploadDocumentWithcontents:dataReturn name:filename12 result:^(BOOL 成功) -> 上传函数。 您可以将字符串保存到文件中,并从文件中读取一个nsarray

以上是关于在 xcode 中使用现有数据编写 plist的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 中编辑 plist

无法在 Xcode 4.3.2 的 ios 模拟器中找到数据库位置和 Plist 位置

我们如何在 Xcode 项目中创建自己的 plist 文件?

Xcode 找不到本地化的 info.plist

将 plist 数据加载到 UITableView 时从不调用惰性初始化程序

Xcode找不到本地化的info.plist