相关疑难解决方法(0)

核心数据:实体<NSSQLEntity Studies id = 3>中未找到键盘错误

谁能告诉我这段代码有什么问题?它引发以下错误并导致应用程序崩溃:

reason: 'keypath Studies.patients.PatientName not found in entity <NSSQLEntity Studies id=3>'
Run Code Online (Sandbox Code Playgroud)

码:

 - (void)viewDidLoad {
        [super viewDidLoad];

        test_coredataAppDelegate *appDelegate = (test_coredataAppDelegate *)[[UIApplication sharedApplication] delegate];
        self.context = appDelegate.managedObjectContext;


        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription 
                                       entityForName:@"Studies" inManagedObjectContext:_context];
        [fetchRequest setEntity:entity];
        /**/
        NSLog(patientName);
        [fetchRequest setPredicate:[NSPredicate predicateWithFormat:
                               @"(Studies.patients.PatientName == %@ )",patientName]];



        NSError *error;
        self.StudiessList = [_context executeFetchRequest:fetchRequest error:&error];
        self.title = @"patients"; 
        [fetchRequest release];

    }
Run Code Online (Sandbox Code Playgroud)

core-data objective-c nspredicate nsfetchrequest

15
推荐指数
2
解决办法
2万
查看次数

核心数据:在实体中找不到Keypath"objectID"

我正在使用NSFetchedResultsController谓词来加载Documents我的应用程序中的列表.我想加载Documents除当前活动的所有之外的所有内容.

我使用Rentzsch的MOGenerator创建一个_Document类,然后我将所有自定义代码放在Document子类中._Document生成一个objectID类型的属性DocumentID.

在创建控制器的类中,我设置了控制器的currentDocID属性:

controller.currentDocID = self.document.objectID;
Run Code Online (Sandbox Code Playgroud)

在控制器本身,我懒得加载fetchedResultsController,如下所示:

- (NSFetchedResultsController *)fetchedResultsController {
    if (fetchedResultsController != nil) {
        return fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(objectID != %@)", self.currentDocID];
    [fetchRequest setPredicate:predicate];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"dateModified" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

    [fetchRequest setSortDescriptors:sortDescriptors];

    NSFetchedResultsController …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa core-data objective-c nsfetchedresultscontroller

12
推荐指数
1
解决办法
1万
查看次数

获取核心数据实体,但不获取子实体

假设我在层次结构中组织了Parent实体,Child它们是根实体并且是子类Parent.我想设置一个NSArrayController只获取实体Parent,但不是Child.

如果您在Interface Builder中设置的实体名称的阵列控制器来Parent,它获取所有Parent和Child实体.我最初尝试在Interface Builder中将数组控制器的fetch谓词设置为:

entity.name == "Parent"
Run Code Online (Sandbox Code Playgroud)

这适用于XML存储,但是当我切换到SQLite存储时,它不再起作用.我收到以下错误:

keypath entity.name not found in entity <NSSQLEntity xxx>
Run Code Online (Sandbox Code Playgroud)

作为一种解决方法,我在我的设置过滤谓词(具有与entity.name上面相同的谓词)awakeFromNib仅过滤父实体.显然,一旦实体在内存中,该谓词就有效,但您不能在SQL支持的提取谓词中使用它.

有没有办法只提取Parent实体,而不是Child使用与SQLite存储一起使用的提取谓词的实体?使用过滤谓词来提取您只会忽略的实体似乎很浪费.

cocoa core-data

4
推荐指数
1
解决办法
4570
查看次数