我正在构建一个从 WordPress 博客网站获取帖子并显示在 tableView 上的应用程序。每个表格 View 单元格显示帖子图像、标题和摘录文本。那是一个类(class)项目,需要使用核心数据。所以我的问题是,为了更好的用户体验,我应该在下载后直接在单元格上显示图像,然后保存到商店,还是应该保存到商店,获取,然后显示?
一些注意事项:
当应用程序启动时,它会检查互联网连接,如果连接建立,商店将被清理并下载最新的帖子。
它将一次下载 5 个帖子
最佳答案
这是一个意见导向的问题。我能做的最好的事情就是让您知道我过去是如何设计我的应用程序来处理这种情况的。
我的解决方案:
使用 NSFetchedResultsController 从核心数据中读取数据,并使用 NSFetchedResultsController 的 fetchedObjects 数组作为您的 UITableViewController 的数据源或UICollectionViewController
实现 NSFetchedResultsController 的委托(delegate),当 Core data 中的数据发生变化时将被触发。这样您就可以高效地更新您的 CollectionView 和 TableView 并尽快在 UI 上显示数据更改。
使用后台上下文修改数据,这样您的主线程就会空闲并且应用程序保持响应。
为了创建背景上下文,我更喜欢父子上下文架构而不是传统的多上下文架构。 parent child context 架构易于理解,保持代码整洁。
切勿将图像保存到核心数据中。而是将下载的图像保存到文档目录,并将下载文件的相对链接保存在 CoreData 中。
记住我说的是删除文件的相对路径而不是绝对文件。因为您的应用程序文件夹/沙箱路径在终止和重新启动应用程序时会发生变化。在核心数据中保存文件的绝对路径是搞砸逻辑的完美方法。
不用担心保存数据到核心数据的延迟。延迟可能只有几分之一秒,您甚至不会注意到。将数据保存在数组中,然后从核心数据中获取数据并更新数组是完全不行的。
就个人而言,使用数组来保存数据而不是 NSFetchedResultsController 的 fetchedObjects 是一个完整的 NO。为什么 ?很简单,Array 不是线程安全的,因为您将在后台线程进行 Web 服务调用和解析数据,您可能有多个线程同时访问 Array。由于 Array 不是线程安全的,您可能很容易进入数据不一致的状态,也可能导致崩溃。
最后使用像 SDWebImage 这样的库来高效地加载图像。 SDWebImage 不仅会加载图像,还会通过快速加载图像将它们缓存在不同级别(在 RAM 和硬盘中)。
如果您打算使用分页来获取数据,请使用 scrollView 的 scrollViewDidScroll 委托(delegate)来确定用户何时滚动到表/collectionView 的底部并进行网络服务调用并获取数据在后台线程更新核心数据。一旦更新 mainObjectContext,NSFetchedResults Controller 的委托(delegate)将被触发,您应该能够立即更新 UI。
关于ios - 下载、保存到核心数据、获取和显示?还是下载、显示然后保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46015237/
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article
我有这样的哈希trial_hash={"key1"=>1000,"key2"=>34,"key3"=>500,"key4"=>500,"key5"=>500,"key6"=>500}我按值降序排列:my_hash=trial_hash.sort_by{|k,v|v}.reverse我现在是这样理解的:[["key1",1000],["key4",500],["key5",500],["key6",500],["key3",500],["key2",34]]但我希望当值相同时按键的升序排序。我该怎么做?例如:上面的散列将以这种方式排序:[["key1",1000],["key3",500
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
这里有一个很好的答案解释了如何在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返回它复制的字节数,但是当我还没有下