- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我会尽量缩短。
我有一个 API 请求,我从中获取数据(即 Parse)。
当我得到结果时,我将其写入 Realm,然后将它们添加到 UICollectionView
的数据源。
有些请求会花费更多时间,它们是异步运行的。在重新加载数据源和 Collection View 后,我得到了所需的结果。
我正在将结果所需的更新写入我的 Realm 数据库。
我读到可以使用 Realm 的 Results
.但老实说我不明白。我想有一种动态且安全的方式来处理 Collection View 和 Realm。这是我现在的方法。
这就是我目前填充 Collection View 数据源的方式:
var dataSource = [Realm_item]()
其中 Realm_item
是一个 Realm Object
类型。
override func viewDidLoad() {
super.viewDidLoad()
for nowResult in FetchedResultsFromAPI
{
let item = Realm_item()
item.item_Title = nowResult["Title"] as! String
item.item_Price = nowResult["Price"] as! String
// Example - Will write it later after the collectionView Done - Async request
GetFileFromImageAndThanWriteRealm(x.image)
// Example - Will write it later after the collectionView Done - Async request
dataSource.append(item)
}
//After finish running over the results *Before writing the image data*
try! self.realm.write {
self.realm.add(self.dataSource)
}
myCollectionView.reloadData()
}
在我将图像写入 Realm 到一个已经创建的“对象”之后。相同的 Realm 对象(具有相同的主键)会在数据源中自动更新吗?
在我将更新写入 Realm DB 中的同一对象后,从数据源更新对象的正确方法是什么?
class Realm_item: Object {
dynamic var item_ID : String!
dynamic var item_Title : String!
dynamic var item_Price : String!
dynamic var imgPath : String?
override class func primaryKey() -> String {
return "item_ID"
}
}
首先,我要检查 Realm 中是否存在“对象 ID”。如果是,我从 Realm 获取对象并将其附加到数据源。如果它不存在,我会创建一个新的 Realm 对象,写入并附加它。
这发生在 viewDidLoad
方法中并准备数据源:
var query = PFQuery(className:"Realm_item")
query.limit = 100
query.findObjectsInBackgroundWithBlock { (respond, error) -> Void in
if error == nil
{
for x in respond!
{
if let FetchedItem = self.realm.objectForPrimaryKey(Realm_item.self, key: x.objectId!)
{
self.dataSource.append(FetchedItem)
}
else
{
let item = Realm_item()
item.item_ID = x.objectId
item.item_Title = x["Title"] as! String
item.item_Price = x["Price"] as! String
let file = x["Images"] as! PFFile
RealmHelper().getAndSaveImageFromPFFile(file, named: x.objectId!)
self.dataSource.append(item)
}
}
try! self.realm.write {
self.realm.add(self.dataSource)
}
self.myCollectionView.reloadData()
print(respond?.count)
}
}
谢谢!
最佳答案
你好像有几个疑问和问题,我会尽力的。
我建议您使用结果类型作为数据源,例如:
var dataSource: Results<Realm_item>?
然后,在您的 viewDidLoad()
中:
dataSource = realm.objects(Realm_item)
.
使用dataSource前一定要进行相关的错误检查。我们使用可选的 Results<Realm_item>
因为您正在使用它的 Realm 对象需要先初始化。也就是说,你会得到类似 "Instance member * cannot be used on type *"
的东西如果你尝试声明像 let dataSource = realm.objects(Realm_item)
这样的结果.
Realm documentation (当你像我一样使用 Realm 时,这是一个写得很好且很有用的引用),关于结果有什么要说的......
Results are live, auto-updating views into the underlying data, which means results never have to be re-fetched. Modifying objects that affect the query will be reflected in the results immediately.
您的里程可能会有所不同,具体取决于您如何设置所有内容。您可以尝试发布您的 Realm 模型和 Parse 相关代码以供审查和评论。
你的最后一个问题:
What is the right way to update the "object" from the Data Source after i wrote the update to same object from the Realm DB?
我了解到您是在询问当基础数据已更新时更新 UI (CollectionView) 的最佳方式?如果是这样...
You can subscribe to Realm notifications to know when Realm data is updated, indicating when your app’s UI should be refreshed for example, without having to re-fetch your Results.
关于ios - 将 Realm 与 Collection View 数据源最佳实践结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34235790/
是否有带有索引的.collect?我想做这样的事情: def myList = [ [position: 0, name: 'Bob'], [position: 0, name: 'J
我创建了一个 Collection 类,它扩展了 ArrayList 以添加一些有用的方法。它看起来像这样: public class Collection extends ArrayList {
我知道如果我有元素,我想得到 List/Set/Map 我可以调用这个元素: Collections.singleton()/Collections.singletonList()/Collectio
我刚刚在我的 pom 文件中看到 Apache commons-collections 有两个不同的组 ID: commons-collections commons-collect
我们可以对所有 Collections 类型的对象(如 Set 和 List)使用 Collections.synchronizedCollection(Collection c),这就是为什么我们有
我有List>我想让它把上一个集合中的所有人复制到List收藏。 我是这样做的: var People = new List>{ new List{...},... };
我想做的是使用良好的旧循环非常简单。 假设我有一个包含 B 列表的对象 A。 public class A { public List myListOfB; } 在其他一些方法中,我有一个 As
在 Capgemini 的采访中,我被问到一个我无法回答的问题。所有集合类和接口(interface)共有的那些方法是什么? 最佳答案 所有 java 对象类(包括所有集合)都派生自名为 Object
我有一系列存储估计信息的数据库表。当设置某些边界时,我试图从所有数据库表中返回所有数据。 收藏 $estimateItems = new Collection(); $esti
为什么 Haskell 实现如此专注于链表? 例如,我知道 Data.Sequence 效率更高 大多数列表操作(cons 操作除外),并且被大量使用; 但是,从语法上讲,它“几乎不受支持”。 Has
我试图简单地将我在 PHP 中请求的内容返回到 JSON。我的问题是每个库存尚未完成。事实上,它是“渲染”,但“this.collection.models”尚未完成,因为请求尚未完成。 我应该如何解
本质上,作为Powershell脚本的一部分,我需要实现广度优先搜索。因此,我需要队列,并且认为System.Collections.Queue与其他任何队列一样好。但是,当我从队列中取出一个对象时,
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是 on-topic用于堆栈溢出。 已关闭10 年前。 Improve t
嗨,我不明白为什么这不起作用? Notifications.update({'userId':Meteor.userId(), 'notifyUserId':notifyFriendId}, {$se
假设我有一个闭包: def increment = {value, step -> value + step } 现在我想遍历我的整数集合的每个项目,用 5 递增,并将新元素保存到一个新集合中:
使用逐页 View 时,我的 plone 集合文件夹未显示所有项目。基本上我有 9 页包含元素,但第 6 - 8 页显示的内容完全相同。因此,并非所有项目都会显示,即使项目总数对应于应该在集合中的元素
private Map> map ,其中 ProgramCourse 是我的项目中的域类,上面的 map 是我运行项目时域类 Program 的字段以下异常即将到来。 Use of @OneToMan
三者的主要区别是什么?现在,我想分别使用字符串/字符串创建一个键/值对。这三个似乎都有我可以使用的选项。 编辑:我只想创建一个简单的哈希表 - 没什么特别复杂的。 最佳答案 通用集合几乎完全取代了基础
我正在为 NodeJs 使用 mongodb 驱动程序,其中有 3 个方法: 1) db.collection.insert 2) 数据库.collection.insertOne 3) db.col
我有一个集合,我正在尝试使用 Distinct 方法删除重复项。 public static Collection imagePlaylist imagePlaylist = imagePlaylis
我是一名优秀的程序员,十分优秀!