Macos fetchRequestTemplateForName:buggy?

Macos fetchRequestTemplateForName:buggy?,macos,core-data,request,fetch,Macos,Core Data,Request,Fetch,我在OSX项目的数据模型中保存了一些简单的获取请求模板。 (OSx10.9+Xcode 5.0.2) 如果我创建按钮并单独触发FR模板,它们工作正常。如果我获取一个包含所有fetch请求模板的字典,将所有键名添加到组合框中,然后将combo.stringValue与model.fetchRequestTemplateForName一起使用,那么只有第一个有效 我有NSLog()语句确认fetchRequestTemplateForName正在被提供一个具有FR模板名称的正确字符串对象 示例-为F

我在OSX项目的数据模型中保存了一些简单的获取请求模板。 (OSx10.9+Xcode 5.0.2)

如果我创建按钮并单独触发FR模板,它们工作正常。如果我获取一个包含所有fetch请求模板的字典,将所有键名添加到组合框中,然后将combo.stringValue与model.fetchRequestTemplateForName一起使用,那么只有第一个有效

我有NSLog()语句确认fetchRequestTemplateForName正在被提供一个具有FR模板名称的正确字符串对象

示例-为FR模板名称提供文字字符串时,所有这些都可以正常工作:

- (IBAction)btnTest:(id)sender {

// get a saved fetch request template from the managed object model

/*  // WORKS FINE
NSFetchRequest * fetchRequest =
[self.managedObjectModel
fetchRequestTemplateForName:@"all_cars_under_15000"];
*/


/*  // WORKS FINE
NSFetchRequest * fetchRequest =
 [self.managedObjectModel
 fetchRequestTemplateForName:@"audi_under_20000"];
*/

/* // WORKS FINE
NSFetchRequest * fetchRequest =
 [self.managedObjectModel
 fetchRequestTemplateForName:@"all_white_cars"];

*/

 // WORKS FINE

NSFetchRequest * fetchRequest =
 [self.managedObjectModel
 fetchRequestTemplateForName:@"all_ford_cars"];


NSError * error = nil;

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


 // initialize and open the results window:
 if (resultsArray) {

  RW =
  [[ResultsWindow alloc]
  initWithWindowNibName:@"ResultsWindow"];

  RW.resultsArray = resultsArray;
 [RW showWindow:nil];
 }
}
问题代码:

当我将这些模板名称添加到组合框中,然后使用组合框来触发和处理fetch请求时,只有一个FR模板有效,然后其他模板以fetchRequest=nil的形式爆炸

例如:

-(void) awakeFromNib {

 NSDictionary * frDict = 
 [self.managedObjectModel fetchRequestTemplatesByName];
 NSArray * allKeys = frDict.allKeys;

  for (int i = 0; i < allKeys.count; i++){

    [self.cmbFetchRequests addItemWithObjectValue: allKeys[i]];

  }
 }





// self.cmbFetchRequests now has all stored FR templates

- (IBAction)cmbChangedStoredFetchRequest:(id)sender {

NSLog(@"%@", self.cmbFetchRequests.stringValue);


NSFetchRequest  * fetch =
 [self.managedObjectModel
 fetchRequestTemplateForName:self.cmbFetchRequests.stringValue];

/* tried this too:
NSFetchRequest  * fetch =
[[self.managedObjectModel
 fetchRequestTemplateForName:self.cmbFetchRequests.stringValue] copy];
*/


if (fetch) {

  // Create a new error object pointer:
  NSError * error = nil;

  // execute the fetch and deliver results to an array:
  NSArray * resultsArray =
  [self.managedObjectContext
   executeFetchRequest:fetch error:&error];


    // initialize and open the results window:
    if (resultsArray) {

    RW =
    [[ResultsWindow alloc]
    initWithWindowNibName:@"ResultsWindow"];


    RW.resultsArray = resultsArray;
    [RW showWindow:nil];
   }

  } else {
   NSLog(@"fetchRequest = nil !");
  }
}
-(void)从NIB唤醒{
NSDictionary*frDict=
[self.managedObjectModel fetchRequestTemplatesByName];
NSArray*allkey=frDict.allkey;
对于(int i=0;i
看起来应该没问题。我可以尝试在两个位置使用对象值,而不是创建具有对象值的条目,然后使用字符串值来查找请求。也就是说,不要使用
self.cmbFetchRequests.stringValue
,而是尝试
self.cmbFetchRequests.objectValueOfSelectedItem
。嗨,汤姆,谢谢你的回复。你的建议奏效了,所以我仍然不确定什么是错误,什么不是。这个代码段工作时不会崩溃,也不会出现nil fetch请求对象:我也不确定问题出在哪里,但这一更改意味着UI元素数据不在循环中,您只使用从模型中查找的数据。我必须仔细查看
stringValue
,看看它与
objectValueOfSelectedItem
有什么不同,才能找出真正的原因。汤姆,我没有试过objectValueOfSelectedItem,但我确实执行了各种类型的强制转换和对象副本,以获得我与fetchRequestTemplateForName一起使用的最终字符串对象。它现在是稳定的,但仍然在我的脑海中蠕动!它可能与谓词的同一类型的怪异联系在一起。您可以解析一些字符串对象并将其传递到谓词字符串中,但不能传递整个谓词!想想看吧