我在核心数据中有一个属性(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_;
};
答案 0 :(得分:1)
当我更新boardIndex时,比如3到5,我需要更新所有其他实体&#34; boardIndex&#34;通过递增或递减1(或什么都不做)来核心数据中的属性。
最好的方法是使用维护任务顺序的数据结构。使用Core Data的方法是使用有序的to-many属性。
创建一个单独的实体来保存任务列表。例如,您可能拥有与Board
具有多对多排序关系的Task
实体。该有序关系将由NSOrderedSet
对象表示,您可以向其添加任务。
我读到了关于&#34;核心聚焦&#34;但我不确定这是否是正确的方法。
这是一种完全不同的索引类型 - Spotlight允许用户搜索其设备上的数据,而Core Spotlight可让您在搜索中包含应用程序的数据。