NSFetchRequest找不到实体名称的NSEntityDescription [英] NSFetchRequest could not locate an NSEntityDescription for entity name

查看:69
本文介绍了NSFetchRequest找不到实体名称的NSEntityDescription的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆