NSFetchRequest返回什么(NSFetchRequest returning nothin

2019-09-18 04:07发布

任何人都可以发现这是为什么不返回任何ManagedObjects? 我想添加到ATNSManagedObject + EasyFetching级以下,但获取的结果没有返回。 如果我取这些的EasyFetch类以外我有100多个对象,所以我知道这是不是CoreData是空的。

+ (void)deleteAllObjectsInContext;
{
    NSManagedObjectContext *context = [NSManagedObjectContext defaultContext];
    NSEntityDescription *entity = [self entityDescriptionInContext:context];
    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
    [request setEntity:entity];
    //[request setIncludesPropertyValues:NO];

    NSError *error = nil;
    NSArray *results = [context executeFetchRequest:request error:&error];
    if (error != nil)
    {
        //handle errors
        NSLog(@"delete error");
    }

    for (NSManagedObject *thing in results) {  <--- |results shows 0 objects|
        [context deleteObject:thing];
    }

    NSError *saveError = nil;
    [context save:&saveError];
}

Answer 1:

试试吧简化到:

// first get the context or pass it in as an argument (this is usually what I do for
// a deleteAll class level method like this but your call

+ (void)deleteAllObjectsInContext:(NSManagedObjectContext*)context {

    NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@ "<yourEntity>"];
    // no predicate
    // no sortDescriptors

    NSError* error = nil;
    NSArray* results = [context executeFetchRequest:request error:&error];

    if (!results || error) { // nil is an error
        // handle error
    }

    // do something with results

}

这样你就可以避免无需检索NSEntityDescription对象。

更新:

只是想添加这个通道 :

返回值

“满足由请求从接收器以及从与所述接收器的持久性存储协调器相关联的持久性存储提取指定的条件。如果发生错误的对象数组,返回零。如果没有对象匹配由请求指定的标准,则返回空阵”。



Answer 2:

一种可能性是,你NSManagedObjectContext *context实际上是nil 。 在Objective-C,将消息发送到零是完全可以接受的,并可以使它难以检测,其中一个问题是。

我没有找到文件[NSManagedObjectContext defaultContext]所以我认为这是你写的类别(或使用); 我怀疑它是不是总是返回一个有效的上下文。 添加一些记录,看看!



Answer 3:

试试这个方法,看日志。 它只是获取一切从当前实体。

+ (NSArray*) retrieveEntity:(NSString*) entityName {

// !!!Here you put your context
NSManagedObjectContext *context = appDelegate.managedObjectContext;

if (context == nil) {
    NSLog(@"Error: No context");
    return nil;
}

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:context];
[fetchRequest setEntity:entity];

NSError *error = nil;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

if (fetchedObjects == nil) {
    // Handle the error
    NSLog(@"Error: No fetched objects.");
    return nil;
}
else 
    NSLog(@"Retrieved objects count:%d", [fetchedObjects count]);

return fetchedObjects;
}

这是一个例子,如何调用它。

    // Retrieve all products
NSArray *flXProducts = [DbConnection retrieveEntity:@"FLXProduct"];

如果返回0,那么在你的数据库中的问题。 你可以找到你的数据库的SQL文件和特林它简单的SQL在终端显示的问题。



文章来源: NSFetchRequest returning nothing