小编s.n*_*ave的帖子

为什么KVO在新旧值相同时发送更改通知?

我有一个实体,它是NSManagedObject的一个子类,叫做Event.我还为KVO更改通知注册了此实体的一些建模属性:

[self.event addObserver:self
             forKeyPath:@"numGuests"
                options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
                context:&numGuestsContext];

[self.event addObserver:self
             forKeyPath:@"checkedIn"
                options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
                context:&checkedInContext];

[self.event addObserver:self
             forKeyPath:@"seatedCount"
                options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
                context:&seatedContext];
Run Code Online (Sandbox Code Playgroud)

然而,即使更改字典中的NSKeyValueChangeOldKey和NSKeyValueChangeNewKey的值相等,似乎也会触发observeValueForKeyPath方法通知.

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
    NSNumber *oldValue = [change valueForKey:NSKeyValueChangeOldKey];
    NSNumber *newValue = [change valueForKey:NSKeyValueChangeNewKey];

    if ([oldValue isEqualToNumber:newValue])
    {
        return;
    }
Run Code Online (Sandbox Code Playgroud)

现在我已经采取了快速的健全性检查来确定它们是否相等,但我想了解为什么这个通知开始被解雇?

更新:@jszumski在评论中提到这很有可能发生,因为虽然逻辑上相同,但对象是不同的.Event实体对象总是具有相同的地址,但是我观察的对象(实体中的属性)不断更改地址,但我不确定为什么?

我想知道在bg查询线程中访问此值是否会导致Core Data在具有相同值的实体中创建新的内部对象?

core-data key-value-observing ios

9
推荐指数
1
解决办法
3573
查看次数

具有可锁定列和水平滚动的表视图?

我期待创建一个具有以下功能的表:

  • 与表的其余部分水平滚动的可变列数
  • 可变数量的可锁定列,不与表的其余部分水平滚动
  • 可排序的列标题
  • 垂直滚动
  • 水平滚动

我见过人们使用不同的策略来完成类似的功能,包括:

  1. UITableview将每个包含UITableview的表格单元格转换为90度,放置另一个UIScrollview 内部以处理水平滚动.为了实现这一点,我需要为每个单元格使用锁定的旋转tableviews,如果我想滚动整个主表而不是每个表格单元格中的表格,似乎会出现一些带有单元格dequeing的funkiness.
  2. 第一个变体但使用自定义uiview而不是每个tablecell的uitableview.(迄今为止的主要候选人)
  3. 定制的UIScrollView类复制一个UITableView的具有添加的功能,如功能MDSpreadView.似乎最灵活,最难实施.

有没有人有任何关于要查看什么的示例/建议/建议,相对容易起床和运行,滚动性能好,灵活.

我仍然处于计划阶段,试图找出最好的方法来解决这个问题,并且已经提出了一些想法,其中包括两个同步滚动的uitableviews.左表视图将用于锁定列,右表将用于水平滚动表.两个表都将使用相同的uiviews作为tablecells,每个列都有自定义uiview对象.

在此输入图像描述

UPDATE

能够同步锁定列和水平滚动表之间的滚动似乎非常简单,到目前为止,这似乎是我倾向于的选项(上面#2).有没有人看到这种方法有任何潜在的陷阱或障碍?

我所追求的理想成品的一个很好的例子可以在Roambi App中找到(截图如下)

在此输入图像描述

谢谢

uitableview uiscrollview ios uicollectionview

6
推荐指数
1
解决办法
4195
查看次数

Core Data中如何有效处理大数据集?

我在应用程序中使用核心数据来存储可能拥有多达 50k 或更多对象的实体。我将其与表视图中的 NSFetchedResultsController 配对。由于单元格重用,表视图工作正常,但我最大的问题是查询实际数据库以获取数据集。

当我第一次加载表视图时,我需要数据库的所有结果。我使用带有单个排序描述符的默认获取请求,并将批量大小设置为 1,000。在 iPad 2 上,此查询最多需要15 秒才能完成!我还必须在搜索取消后运行此查询,因此总的来说,它使应用程序无法使用。我的假设是 CD 仍然必须解决所有这些结果或设置部分或其他内容,我真的不知道,但仅使用 batchSize 没有帮助?内容也非常动态,因为总是添加新行、更改排序顺序等。因此缓存的好处有限。

我现在认为最好的选择是在 fetchRequest 中使用 fetchLimit,然后实现一些基本的分页。当表视图滚动到末尾时获取下一个“页面”结果?这种方法的唯一问题是我丢失了sectionIndex,并且我想不出任何解决方法。

有人有任何想法或已经处理过这个问题吗?

core-data uitableview nsfetchedresultscontroller ios

5
推荐指数
1
解决办法
909
查看次数

奇怪的问题 - "索引x处的获取对象有一个乱序的部分名称"

我收到以下错误消息:

CoreData: error: (NSFetchedResultsController) The fetched object at index 5 has an out of order section name 'James. Objects must be sorted by section name'
Unresolved search error Error Domain=NSCocoaErrorDomain Code=134060 "The operation couldn’t be completed. (Cocoa error 134060.)" UserInfo=0xaa07530 {reason=The fetched object at index 5 has an out of order section name 'James. Objects must be sorted by section name'}, {
    reason = "The fetched object at index 5 has an out of order section name 'James. Objects must …
Run Code Online (Sandbox Code Playgroud)

core-data nsfetchedresultscontroller ios

5
推荐指数
1
解决办法
2738
查看次数