问题描述
对于SO上的类似问题,我已经尝试过提议的解决方案,但是没有运气。提取请求无法找到实体名称 GarmentType。
I've tried the proposed solutions for similar questions on SO but with no luck. The fetch request can't locate the entity name 'GarmentType'.
这是我的数据模型:
Here is my data model:
在此帮助程序类别中的executeFetchRequest上引发了错误:
The error is thrown at the executeFetchRequest in this helper category:
//
// GarmentType+Create.m
// Dressy
//
// Created by Michael Mangold on 9/4/13.
// Copyright (c) 2013 Michael Mangold. All rights reserved.
//
#import "GarmentType+Create.h"
@implementation GarmentType (Create)
// Creates or fetches a Core Data GarmentType entity.
+ (GarmentType *)garmentTypeWithName:(NSString *)name inManagedObjectContext:(NSManagedObjectContext *)context
{
NSLog(@"name:%@ context:%@",name,context);
GarmentType *garmentType = nil;
// Build fetch request.
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"GarmentType"];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]];
request.predicate = [NSPredicate predicateWithFormat:@"name = %@",name];
// Execute fetch requesst.
NSError *error = nil;
NSArray *matches = [context executeFetchRequest:request error:&error]; // This is where it dies.
if (!matches || [matches count] > 1) {
NSLog(@"Error creating GarmentType.");
} else if ([matches count] == 0) {
garmentType = [NSEntityDescription insertNewObjectForEntityForName:@"GarmentType" inManagedObjectContext:context];
garmentType.name = name;
} else {
garmentType = [matches lastObject];
}
return garmentType;
}
@end
名称记录正确的名称
当按下完成按钮时,从UITableViewController IBAction调用帮助程序:
The helper is called from a UITableViewController IBAction when the 'done' button is pressed:
- (IBAction)handleDoneButton:(UIBarButtonItem *)sender
{
// Add garment type to core data.
[DressyHelper openDocumentUsingBlock:^(UIManagedDocument *document){
GarmentType *newGarment = [GarmentType garmentTypeWithName:self.garmentTypeNameTextField.text inManagedObjectContext:document.managedObjectContext];
NSLog(@"newGarment.name:%@",newGarment.name);
}];
[self dismissViewControllerAnimated:YES completion:nil];
}
newGarment.name记录良好。
newGarment.name logs fine.
这是GarmentType的.h:
Here is the .h for GarmentType:
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class Garment;
@interface GarmentType : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *garments;
@end
@interface GarmentType (CoreDataGeneratedAccessors)
- (void)addGarmentsObject:(Garment *)value;
- (void)removeGarmentsObject:(Garment *)value;
- (void)addGarments:(NSSet *)values;
- (void)removeGarments:(NSSet *)values;
@end
为代码转储道歉,但我一直在努力有一阵子。更改实体名称会导致相同的错误,只是新名称与未找到的实体相同。
Apologies for the code dump but I've been struggling with this for a while. Changing the entity name results in the same error, just with the new name as the entity not found.
GarmentType的检查器:
Inspector for GarmentType:
还有例外:
2013-12-10 13:51:50.320 Dressy[4336:70b] name:asdf context:<NSManagedObjectContext: 0x8ad86f0>
2013-12-10 13:51:50.323 Dressy[4336:70b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSFetchRequest could not locate an NSEntityDescription for entity name 'GarmentType''
*** First throw call stack:
(
0 CoreFoundation 0x017465e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x014c98b6 objc_exception_throw + 44
2 CoreData 0x019b4b6e -[NSFetchRequest(_NSInternalMethods) _resolveEntityWithContext:] + 510
3 CoreData 0x019b34d6 -[NSManagedObjectContext executeFetchRequest:error:] + 70
4 Dressy 0x000051de +[GarmentType(Create) garmentTypeWithName:inManagedObjectContext:] + 510
5 Dressy 0x00002170 __54-[GarmentTypeAddTableViewController handleDoneButton:]_block_invoke + 208
6 Dressy 0x00006d51 __39+[DressyHelper openDocumentUsingBlock:]_block_invoke21 + 97
7 UIKit 0x00781f7b __59-[UIDocument saveToURL:forSaveOperation:completionHandler:]_block_invoke570 + 54
8 libdispatch.dylib 0x01e43440 _dispatch_barrier_sync_f_slow_invoke + 71
9 libdispatch.dylib 0x01e544b0 _dispatch_client_callout + 14
10 libdispatch.dylib 0x01e4275e _dispatch_main_queue_callback_4CF + 340
11 CoreFoundation 0x017aba5e __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 14
12 CoreFoundation 0x016ec6bb __CFRunLoopRun + 1963
13 CoreFoundation 0x016ebac3 CFRunLoopRunSpecific + 467
14 CoreFoundation 0x016eb8db CFRunLoopRunInMode + 123
15 GraphicsServices 0x03a4d9e2 GSEventRunModal + 192
16 GraphicsServices 0x03a4d809 GSEventRun + 104
17 UIKit 0x00237d3b UIApplicationMain + 1225
18 Dressy 0x0000585d main + 141
19 libdyld.dylib 0x020e670d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
TIA
推荐答案
我终于找到了问题所在。 .xcdatamodel未包含在目标成员资格中。在Xcode左侧的导航器窗格中选择xcdatamodel,然后在右侧的实用工具窗格中选择第一个选项卡(文件检查器),然后在 Target Membership部分中选择数据模型即可解决此问题。
I finally found the problem. The .xcdatamodel wasn't included in the target membership. Selecting the xcdatamodel in the navigator pane on the left in Xcode, then selecting the first tab (File inspector) in the Utilities pane on the right, then selecting the data model in the Target Membership section fixes the problem. Thank you so much to everyone who responded.
这篇关于NSFetchRequest找不到实体名称的NSEntityDescription的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!