我正在创建一个应用程序,它需要“离线”持久保存通过 OData 网络服务公开的数据。 OData 服务使我能够访问底层数据库的所有表,以及所有相关的数据库字段,例如 ID。
此外,我已经有了可以使用的 SQLite 数据库架构。
我的问题是,直接通过 SQLite(使用 FMDB)或利用 Core Data 将 Web 服务数据存储在设备上是否更好?我已经反复思考了两次这个问题?
如果我使用 Core Data,那么我将失去主键和外键的关系优势,但会获得自动嵌套/填充 NSManagedObjects 的优势。我不完全确定如何最好地重新创建我的数据对象的关系性质。 如果我使用 SQLite,我可以直接插入/更新 Web 服务调用的结果,并自动从现有的外键列中获取关系。缺点是我可能需要手动将我的结果封装在 POCO 对象中。 我现在的直觉告诉我 SQLite,但似乎社区在任何/所有情况下都压倒性地指向 Core Data。如果是核心数据,我如何最好地创建和维护对象关系(尤其是当它们是 1-> 多时) 如果有任何 Apple 满意的方面存在问题,此应用将不会进入应用商店。
最佳答案
核心数据直接建立关系模型。所以在你的模式中你可能会说例如对象 A 与对象 B 有关系,并且这种关系是“对多”的。然而,这些关系就像普通的对象引用一样工作——你需要将 A 的每个实例链接到 B 的所有相关实例,你不会 [轻松地,或通常] 只是说“A 通过外键 bID 与 B 相关”,然后让关系自行处理。
如果您有一个 SQL 持久存储,那么实现的方式是每个对象都为其表获取一个隐式唯一键。关系被建模为一个额外的列,其中包含外表中每个链接对象的一个或多个键。
人们不喜欢 Core Data 的其他方面:
objectID 引用是线程安全的,您可以取而代之的是获取类似安全的字典如果您愿意,可以使用事件对象);反之:
NSIncrementalStore,这样您就可以运行 Core Data 查询,并且您的 Core Data 存储足够智能,可以在需要时访问服务器 — 您的代码主体具有不知道数据是本地的还是远程的,并且在声明要查找的内容时不需要重复;关于ios - Core Data vs. SQLite 用于通过 OData 公开的现有数据库的离线持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15914064/
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
当我使用has_one时,它工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上