核心数据更新所有"索引"物业(iOS)

时间:2017-02-18 02:57:07

标签: ios core-data

我在核心数据中有一个属性(NSNumber),名为" boardIndex"在实体"任务"。每个boardIndex都是唯一的,这意味着boardIndex 3不能有两个任务。

当我更新boardIndex时,比如3到5,我需要更新所有其他实体" boardIndex" Core Data中的属性,通过递增或递减1(或不执行任何操作)。例如,boardIndex为4的任务现在为3,boardIndex为5的任务现为4,而3为3的boardIndex为5;类似于indexPath在tableView中的工作方式。

这样做的最佳做法是什么?我读到了" Core Spotlight"但我不确定这是否是正确的方法。任何帮助都会很棒。

代码如果有帮助:

class FancyStore {
public:
  template <typename T>
  T& addItem(const T& item) {
     void*& raw = store_[typeid(T)];
     if (!raw) {
       raw = new std::vector<T>();
     }
     auto v = static_cast<std::vector<T>*>(raw);
     v->push_back(item);
     return v->back();
  }    

  template <typename T>
  T& getItem(size_t index) {
     void* raw = store_[typeid(T)];
     auto v = static_cast<std::vector<T>*>(raw);
     return (*v)[index];
  }

private:
  std::unordered_map<std::type_index, void*> store_;
};

1 个答案:

答案 0 :(得分:1)

  

当我更新boardIndex时,比如3到5,我需要更新所有其他实体&#34; boardIndex&#34;通过递增或递减1(或什么都不做)来核心数据中的属性。

最好的方法是使用维护任务顺序的数据结构。使用Core Data的方法是使用有序的to-many属性。

创建一个单独的实体来保存任务列表。例如,您可能拥有与Board具有多对多排序关系的Task实体。该有序关系将由NSOrderedSet对象表示,您可以向其添加任务。

  

我读到了关于&#34;核心聚焦&#34;但我不确定这是否是正确的方法。

这是一种完全不同的索引类型 - Spotlight允许用户搜索其设备上的数据,而Core Spotlight可让您在搜索中包含应用程序的数据。