在 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 4.3.2 的 ios 模拟器中找到数据库位置和 Plist 位置
我们如何在 Xcode 项目中创建自己的 plist 文件?