菜鸟教程小白 发表于 2022-12-13 13:36:27

ios - 获取过滤后的数据,再次过滤Coredata中的数据


                                            <p><p>我正在处理核心数据。我有一个实体“目录”,它或多或少有 20 个属性。我正在获取数据并针对catalogId使用谓词,它是实体中的属性。在接收到的数据中,所有实体数据但有重复数据,我必须避免它们。我也用过这个</p>

<pre><code>NSManagedObjectContext *context = [(CategoriesAppDelegate*).delegate managedObjectContext];
NSFetchRequest* fetch = ;
NSEntityDescription* entity = ;
;
NSPredicate *predicate = ];
;
objectForKey:@&#34;pageid&#34;], [objectForKey:@&#34;catalogid&#34;], nil]];
;
;
NSError* error = nil;
self.resultPageArray = ;
NSLog(@&#34;result array count %lu&#34;,(unsigned long)self.resultPageArray.count);
NSLog (@&#34;names: %@&#34;,self.resultPageArray);
NSLog(@&#34;result array values &#34;);

return resultPageArray;
</code></pre>

<p>但它没有用。在 Catalog 实体中,有一个 pageId 属性,在整个实体中重复出现。我想要使​​用catalogId的数据,其中应该跳过具有相同pageId的行,我的意思是避免在获取的数据中重复pageId..
提前致谢</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>以下使用两步过程。使用两次提取的原因是:要为每个 <code>pageid</code> 选择一个对象,我们必须使用 <code>propertiesToGroupBy</code>,这 a) 意味着我们必须使用 <code>NSDictionaryResultType</code> 和 b) 意味着我们无法获取除 <code>propertiesToGroupBy</code> 中指定的属性以外的任何属性(正如您在之前的一个问题中发现的那样)。这两个步骤是:</p>

<ol>
<li>获取 NSManagedObjectID,按 <code>pageid</code> 分组。 (虽然不能指定其他<em>属性</em>,但可以指定<em>objectID</em>。注意CoreData会<em>任意</em>为每个<code>挑选一个对象pageid</code>,并使用其 objectID。)</li>
<li>使用 (1) 返回的 objectID 获取 NSManagedObjects。</li>
</ol>

<p>以上代码:</p>

<pre><code>NSManagedObjectContext *context = [(CategoriesAppDelegate*).delegate managedObjectContext];
// First fetch
NSFetchRequest *fetch = ;
// fetch only object IDs
NSExpressionDescription *objIdED = ;
objIdED.expression = ;
objIdED.name = @&#34;objId&#34;;
objIdED.expressionResultType = NSObjectIDAttributeType;
];
// Group by &#34;pageid&#34;
];
// Dictionary result type required for Group By:
;
NSError* error = nil;
NSArray *interimResults = ;
// Convert the array of dictionaries into an array of NSManagedObjectIDs
NSArray *requiredObjectIDs = ;
// Second fetch
NSFetchRequest *secondFetch = ;
// Fetch only the objects with the required objectIDs
secondFetch.predicate = ;
self.resultPageArray = ;
NSLog(@&#34;result array count %lu&#34;,(unsigned long)self.resultPageArray.count);
NSLog (@&#34;names: %@&#34;,self.resultPageArray);
NSLog(@&#34;result array values &#34;);
</code></pre>

<p>(为简洁起见省略了错误检查)。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 获取过滤后的数据,再次过滤Coredata中的数据,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34759379/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34759379/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 获取过滤后的数据,再次过滤Coredata中的数据