菜鸟教程小白 发表于 2022-12-13 04:06:23

ios - XCode iOS6 CoreData NSFetchedResultsController 无法获取新数据


                                            <p><p>我有这段代码:</p>

<pre><code>- (void) fetchRecordsStaringFrom:(double)start limit:(double)limit whereFields:(NSArray*)whereFields haveValues:(NSArray*)whereValues sortBy:(NSString*)sortField ascending:(BOOL)isascending delegateEvent:(BOOL)delegateEvent{
NSFetchRequest *_fetchRequest = [ init];
;
// Create the sort descriptors array.
// Default sort is ID
if (sortField == NULL) {
    sortField = @&#34;id&#34;;
}
NSSortDescriptor *authorDescriptor = [ initWithKey:sortField ascending:NO];
NSArray *sortDescriptors = [ initWithObjects:authorDescriptor, nil];
;
if (whereFields != Nil &amp;&amp; whereValues != Nil &amp;&amp; ( == )) {
    NSMutableString *predicateString = [ initWithString:@&#34;&#34;];
    for (int index = 0; index &lt; ; index++) {
      , whereValues];
      if (index &lt; - 1) {
            ;
      }
    }
    // Delete old cache to make sure always get new data
    ;
    NSPredicate *predicate = ;
    ;
} else {
}
self.fetchRequest = _fetchRequest;
self.fetchResultController = [ initWithFetchRequest:self.fetchRequest managedObjectContext:self.context sectionNameKeyPath:nil cacheName:nil];
self.fetchResultController.delegate = self;
NSError *_error;
if (delegateEvent) {
    if () {
      ;
    }
    if (!) {
      if () {
            ;
      }
    } else {
      if () {
            ;
      }
    }
    if () {
      ;
    }
} else {
    ;
}
}
</code></pre>

<p>上面的方法执行时会从SQLITE数据库中获取数据,这里没问题,
但是当我使用外部 SQLITE 编辑器或通过其他方式更改 SQLITE,然后使用相同的参数再次执行时,它无法获取新数据并保留生成的旧数据,除非我重新启动应用程序。</p>

<p>我到处找,可能是因为缓存,但正如你所见,我已经清除了缓存,但仍然无法获取新数据。</p>

<hr/>

<p>感谢您的回复,
答案是:只是为了测试,</p>

<p>这是实际情况:
例如,在屏幕 UITableView 中,从互联网获取数据(数据不完整),将其存储在数据库中然后加载并显示在 View 中,然后当点击一个单元格时,将从互联网获取所选单元格的完整数据,更新数据库,并将其显示在其他屏幕上。当返回 UItableView 并从数据库重新加载时,由于之前的更新,记录集应该被更改,所以当用户在同一个单元格上重新点击时,不需要从互联网获取数据,因为我们已经完成了选定单元格的数据。但是....正如我在上面的问题中解释的那样,NSFetchResultController 没有提供新数据,即使在 SQLITE 文件更新之后!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>好的,对不起,很抱歉,这就是我为将来遇到此问题的任何人解决问题的方法,所有功劳都归于这里的每个人,谢谢。</p>

<p>在执行获取请求时,请确保删除旧缓存</p>

<pre><code>;
</code></pre>

<p>然后对于所有在 fetchResultController 中获取的对象,使用选项 mergeChanges YES 调用 refreshObject</p>

<pre><code>for (int i = 0; i &lt; [ count]; i++) {
objectAtIndex:i] mergeChanges:YES];
}
</code></pre>

<p>这将确保您每次执行获取请求时都能获取新数据</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - XCode iOS6 CoreData NSFetchedResultsController 无法获取新数据,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/18820494/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/18820494/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - XCode iOS6 CoreData NSFetchedResultsController 无法获取新数据