从服务器下载.plist并将其保存在iPhone应用程序的本地

从服务器下载.plist并将其保存在iPhone应用程序的本地,iphone,objective-c,save,plist,Iphone,Objective C,Save,Plist,我想将应用内购买集成到我的应用程序中,因此每当用户购买新的关卡集时,我都想下载.plist文件。如何从服务器下载文件并保存,使其永远留在iPhone应用程序中 编辑 我想实现这样的目标: 由于这些plist不多(不超过20个),我可以将它们包含到应用程序中,并使用isPurchased左右设置一个布尔值,对吗? 如果用户购买了该类别,则布尔值设置为YES。 每当我添加新的类别时,我都会有一个全新的更新,比如“割断绳子”这样的更新。这是一个好方法吗 快速且脏的一层衬里: [[NSData dat

我想将应用内购买集成到我的应用程序中,因此每当用户购买新的关卡集时,我都想下载.plist文件。如何从服务器下载文件并保存,使其永远留在iPhone应用程序中

编辑

我想实现这样的目标:

  • 由于这些plist不多(不超过20个),我可以将它们包含到应用程序中,并使用
    isPurchased
    左右设置一个布尔值,对吗? 如果用户购买了该类别,则布尔值设置为
    YES
    。 每当我添加新的类别时,我都会有一个全新的更新,比如“割断绳子”这样的更新。这是一个好方法吗
快速且脏的一层衬里:

[[NSData dataWithContentsOfURL:@"http://<yourfile>.plist"] writeToFile:@"pathforthefile.plist" atomically:YES];
[[NSData dataWithContentsOfURL:@]http://.plist“]writeToFile:@“pathforthefile.plist”原子:是];

快速脏衬里:

[[NSData dataWithContentsOfURL:@"http://<yourfile>.plist"] writeToFile:@"pathforthefile.plist" atomically:YES];
[[NSData dataWithContentsOfURL:@]http://.plist“]writeToFile:@“pathforthefile.plist”原子:是];
首先:为什么不使用服务进行应用内购买?为什么要使用自己的实现?我不确定,但是……你认为你会得到苹果的批准吗?就我所记得的,亚马逊在过去也做过类似的事情,但他们没有得到

第二:我不会将NSData用于此目的。如果您有一个有效的属性列表,那么它是最好的解决方案

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"foobar.com/plistfile.plist"]];
然后你可以储存这本字典。老实说,我不建议使用您的解决方案。如果我理解正确的话,过一段时间你就会有成千上万的麻烦了。我的建议是:例如,使用“全局”可变字典作为应用程序代理的ivar。这在开始时应该是空的。然后下载上面提到的助手词典,并用

[[delegateInstance globalDictionary] addEntriesFromDictionary:dict];
每次你得到新的数据

保存

[[delegateInstance globalDictionary] writeToFile:@"path" atomically:YES];
并在每次应用启动时将其恢复

编辑:

你当然可以那样做。如果这些plist真的存储信息,那没关系。例如,您可以将帐单信息存储在那里,这样其他用户就不能互换(或者至少不能互换)。但是,如果你只想得到关于这个问题的信息,如果用户购买了一个特定的水平或不考虑将你的信息组合在一个PLIST(如上所述)。不管怎样:考虑一下你的用户有可能收回他们的数据。设想有人意外删除了你的应用程序。你想怎么向他解释他买的东西都丢了?应用内购买更安全

或者至少:在服务器上存储收据副本,让用户登录以收集他们过去支付的费用;-)

祝你玩得开心,好运!:-)

首先:为什么不使用服务进行应用内购买?为什么要使用自己的实现?我不确定,但是……你认为你会得到苹果的批准吗?就我所记得的,亚马逊在过去也做过类似的事情,但他们没有得到

第二:我不会将NSData用于此目的。如果您有一个有效的属性列表,那么它是最好的解决方案

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"foobar.com/plistfile.plist"]];
然后你可以储存这本字典。老实说,我不建议使用您的解决方案。如果我理解正确的话,过一段时间你就会有成千上万的麻烦了。我的建议是:例如,使用“全局”可变字典作为应用程序代理的ivar。这在开始时应该是空的。然后下载上面提到的助手词典,并用

[[delegateInstance globalDictionary] addEntriesFromDictionary:dict];
每次你得到新的数据

保存

[[delegateInstance globalDictionary] writeToFile:@"path" atomically:YES];
并在每次应用启动时将其恢复

编辑:

你当然可以那样做。如果这些plist真的存储信息,那没关系。例如,您可以将帐单信息存储在那里,这样其他用户就不能互换(或者至少不能互换)。但是,如果你只想得到关于这个问题的信息,如果用户购买了一个特定的水平或不考虑将你的信息组合在一个PLIST(如上所述)。不管怎样:考虑一下你的用户有可能收回他们的数据。设想有人意外删除了你的应用程序。你想怎么向他解释他买的东西都丢了?应用内购买更安全

或者至少:在服务器上存储收据副本,让用户登录以收集他们过去支付的费用;-)


祝你玩得开心,好运!:-)

查看NSURLConnection类以了解如何加载URL请求以下载数据,然后查看NSFileManager以将下载的数据保存到磁盘(应用程序的文档目录)。查看NSURLConnection类以了解如何加载URL请求以下载数据,然后查看NSFileManager以将下载的数据保存到磁盘(应用程序的文档目录).非常脏
dataWithContentsOfURL:
阻塞,这意味着网络问题可能导致应用程序冻结。除了本地URL之外,它不适用于任何其他应用程序。因此,您希望重复从web下载相同的文件,但每次在本地为其指定一个新的唯一名称?如果锁定应用程序是您唯一担心的事情,请在后台线程上发送它。或者在后台执行选择器,只需输入。您是否只想保留plist文件在服务器上的名称?您只需将其包装在GCD调度块中,以避免冻结主线程。非常脏
dataWithContentsOfURL:
阻塞,这意味着网络问题可能导致应用程序冻结。除了本地URL之外,它不适用于任何其他应用程序。因此,您希望重复从web下载相同的文件,但每次在本地为其指定一个新的唯一名称?如果锁定应用程序是您唯一担心的事情,请在后台线程上发送它。或者在后台执行选择器,只需输入。您是否只想将plist文件的名称保留为服务器上的名称?您只需将其包装在GCD中即可