2014-09-24 33 views
0

我想过滤一些管理对象。结果虽然是zip。为什么这个获取请求不返回

过滤器是“名称”。名称是根视图提供给此详细视图的元素。 名称记录确定:

[48582:2754928] name: To Be 
[48582:2754928] predicate: name == @"name" 

name = [self.detailItem valueForKey:@"name"]; 

NSError *error; 
    if (![[self fetchedResultsController] performFetch:&error]) { 
     // Update to handle the error appropriately. 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     exit(-1); // Fail 
    } 

和FetchResultsController如下:

NSError *error = nil; 
    name = [self.detailItem valueForKey:@"name"]; 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"VerbEntity" inManagedObjectContext:self.managedObjectContext]; 
    [fetchRequest setEntity:entity]; 
    predicate = [NSPredicate predicateWithFormat:@"name == %@",@"name"]; 
    NSLog(@"name: %@", name); 
    fetchRequest.predicate = predicate; 
    NSLog(@"predicate: %@", predicate); 

// Create the sort descriptors array. 
    NSArray *sortDescriptorArray = nil; 

    // Declare sort descriptors 
    NSSortDescriptor *sortDescriptorPrimary = nil; 




    sortDescriptorPrimary = [[NSSortDescriptor alloc] initWithKey:@"position" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; 

    // Set sort descriptor array 
    sortDescriptorArray = @[sortDescriptorPrimary]; 

    // Apply sort descriptors to fetch request 
    [fetchRequest setSortDescriptors:sortDescriptorArray]; 

    NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; 

    NSLog(@"fetchedObjects count: %lu", (unsigned long)fetchedObjects.count); 
    _fetchedResultsController.delegate = self; 
    return _fetchedResultsController; 
} 

做任何事情脱颖而出靠不住?谢谢你的帮助。

+2

没有谓词,你的获取返回的东西吗?如果name是一个'NSString',那么使用'@“名称LIKE%@”'怎么办?你不是想把'@“name ==%@”,@“name”'改成'@“name ==%@”,name',这可能是一个错误,并解释了为什么你没有找到任何东西在你的提取? – Larme 2014-09-24 14:37:41

+0

如果初始化提取请求的方式不同,会发生什么情况?也许试试 [NSFetchRequest fetchRequestWithEntityName:@“VerbEntity”]; 另外,什么是_fetchedResultsController?一个NSFetchedResultsController?如果是这样,你需要在其上设置NSFetchRequest对象。 – 2014-09-24 15:33:20

+0

谢谢大家。你的答案组合解决了这个问题。 – 2014-09-24 18:32:19

回答

1

它看起来像你的_fetchedResultsController没有对其设置获取请求。也许有超过这个代码片断显示...但这可能会工作

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"VerbEntity"]; 
request.predicate = [NSPredicate predicateWithFormat:@"name == %@",@"name"]; 

// Note: Sort descriptors available depend on the backing store type. 
NSSortDescriptor *sortDescriptorPrimary = [[NSSortDescriptor alloc] initWithKey:@"position"   
                     ascending:YES 
                     selector:@selector(localizedCaseInsensitiveCompare:)]; 

request.sortDescriptors = @[sortDescriptorPrimary]; 

// The request needs to be set on the controller. 
NSFetchedResultsController *controller = 
    [[NSFetchedResultsController alloc] initWithFetchRequest:request 
             managedObjectContext:self.managedObjectContext 
              sectionNameKeyPath:nil 
                cacheName:nil]; 
// The controller needs to perform the fetch. 
[controller performFetch:nil]; // Optionally pass in an NSError. 
controller.delegate = self; 
_fetchedResultsController = controller; 
return controller;