Ios 核心数据关系之谜

Ios 核心数据关系之谜,ios,objective-c,uitableview,core-data,Ios,Objective C,Uitableview,Core Data,我正在构建一个简单的应用程序来揭示我的初学者在理解核心数据关系方面的差距,它就是这样做的。以下是一个简短的描述: 该应用程序有三个视图:HomeViewController、AddViewController和AddCategoryViewController 我的数据模型有两个实体,其关系如下: 新的WMDGCategory对象通过AddCategoryViewController中的文本字段添加,新的WMDGActivity对象通过AddViewController中的文本字段添加 我的目

我正在构建一个简单的应用程序来揭示我的初学者在理解核心数据关系方面的差距,它就是这样做的。以下是一个简短的描述:

该应用程序有三个视图:
HomeViewController
AddViewController
AddCategoryViewController

我的数据模型有两个实体,其关系如下:

新的
WMDGCategory
对象通过
AddCategoryViewController
中的文本字段添加,新的
WMDGActivity
对象通过
AddViewController
中的文本字段添加

我的目标是能够在HomeViewController的tableview中显示WMDGActivity对象,这些对象分组在由WMDGCategory对象定义的部分下

目前,当我在sim卡中启动它时,没有崩溃,但我得到以下错误堆栈:

2014-03-03 12:39:07.893 EntitiesAndRelationships[323:a0b] +[NSManagedObjectContext(MagicalRecord) MR_contextWithStoreCoordinator:](0x2f80ac) -> Created Context UNNAMED
2014-03-03 12:39:07.895 EntitiesAndRelationships[323:a0b] +[NSManagedObjectContext(MagicalRecord) MR_setRootSavingContext:](0x2f80ac) Set Root Saving Context: <NSManagedObjectContext: 0x8dadea0>
2014-03-03 12:39:07.899 EntitiesAndRelationships[323:a0b] +[NSManagedObjectContext(MagicalRecord) MR_newMainQueueContext](0x2f80ac) Created Main Queue Context: <NSManagedObjectContext: 0x8aa4180>
2014-03-03 12:39:07.900 EntitiesAndRelationships[323:a0b] +[NSManagedObjectContext(MagicalRecord) MR_setDefaultContext:](0x2f80ac) Set Default Context: <NSManagedObjectContext: 0x8aa4180>
2014-03-03 12:39:07.916 EntitiesAndRelationships[323:a0b] CoreData: error: (NSFetchedResultsController) object <WMDGActivity: 0x8aabff0> (entity: WMDGActivity; id: 0x8aac930 <x-coredata://126C2FFD-8184-43B1-AA4D-AEFBE1AAC1A1/WMDGActivity/p1> ; data: {
    category = nil;
    name = Programming;
    toCategory = nil;
}) returned nil value for section name key path 'toCategory.name'. Object will be placed in unnamed section
2014-03-03 12:39:07.917 EntitiesAndRelationships[323:a0b] CoreData: error: (NSFetchedResultsController) object <WMDGActivity: 0x8aad520> (entity: WMDGActivity; id: 0x8aac940 <x-coredata://126C2FFD-8184-43B1-AA4D-AEFBE1AAC1A1/WMDGActivity/p2> ; data: {
    category = nil;
    name = "New Workplace Activity";
    toCategory = nil;
}) returned nil value for section name key path 'toCategory.name'. Object will be placed in unnamed section
然而,我仍然得到相同的读数——一些变量:

category = nil;
name = Zoomba;
toCategory = nil;

尽管您设置了
self.thisActivity.toCategory.name
,但通常不应该这样做,而且您从未实际设置过
self.thisActivity.toCategory

除非创建对象,否则对象不存在。关系不包含对象,除非您设置它们。您的问题似乎是您从未实际创建(或至少获取现有的)可连接到
WMDGActivity
WMDGCategory
实例

因此,当您尝试使用FRC中的关系内容时,会得到一个
nil
。(您可以在日志中看到,它反复显示
toCategory=nil;


通过将活动的
toCategory
设置为
WMDGCategory
instances来修复此问题。

谢谢,Wain!请参见上面的编辑。尽管制作了我认为反映了你指导的MOD,但显然不是。仍然是相同的读数,关系设置为零。您在哪里设置
thisCategory
?然后
此活动。是否要分类?您仍然只是在设置名称,需要先创建一个对象,然后设置关系。要获取您拥有的日志,您必须在某个地方创建对象,将指向其中一个对象的指针传递到
thisCategory
我想我看起来一定很迟钝,但我就是不明白。我不想失去我的欢迎,但我是个新手,有时需要在减速带上踢一脚。如果您愿意的话,一行或两行代码肯定会帮助我通过传递指向此类别的指针来准确理解您的意思。:)谢谢你的帮助!您需要在某个地方添加
self.thisActivity=self.thiscegory
。但是,在此之前,
this.thisCategory
需要设置为
WMDGCategory
的实例。目前还不清楚你是否有这些工作。那么,您在哪里设置了
self.thisCategory=…
以及设置了什么(使用NSLog检查它设置了什么)。-(void)pickerView:(UIPickerView*)pickerView didSelectRow:(NSInteger)row component:(NSInteger)component{self.thisCategory=[frc.fetchedObjects objectAtIndex:row];}抱歉--我不知道如何在注释中设置格式。
2014-03-03 13:08:24.321 EntitiesAndRelationships[323:a0b] Number of categories is 2
2014-03-03 13:08:24.323 EntitiesAndRelationships[323:a0b] Number of categories is 2
2014-03-03 13:08:24.328 EntitiesAndRelationships[323:a0b] Number of categories is 2
2014-03-03 13:08:24.329 EntitiesAndRelationships[323:a0b] Number of categories is 2
2014-03-03 13:08:24.333 EntitiesAndRelationships[323:a0b] Title of row is <WMDGCategory: 0x8ac0c20> (entity: WMDGCategory; id: 0x8ac4640 <x-coredata://126C2FFD-8184-43B1-AA4D-AEFBE1AAC1A1/WMDGCategory/p2> ; data: <fault>)
2014-03-03 13:08:24.335 EntitiesAndRelationships[323:a0b] Title of row is <WMDGCategory: 0x8ac0e00> (entity: WMDGCategory; id: 0x8ac4730 <x-coredata://126C2FFD-8184-43B1-AA4D-AEFBE1AAC1A1/WMDGCategory/p1> ; data: <fault>)
2014-03-03 13:08:24.338 EntitiesAndRelationships[323:a0b] Title of row is <WMDGCategory: 0x8ac0c20> (entity: WMDGCategory; id: 0x8ac4640 <x-coredata://126C2FFD-8184-43B1-AA4D-AEFBE1AAC1A1/WMDGCategory/p2> ; data: {
    activities = "<relationship fault: 0x8ad7ca0 'activities'>";
    name = Sports;
})
2014-03-03 13:08:24.339 EntitiesAndRelationships[323:a0b] Title of row is <WMDGCategory: 0x8ac0e00> (entity: WMDGCategory; id: 0x8ac4730 <x-coredata://126C2FFD-8184-43B1-AA4D-AEFBE1AAC1A1/WMDGCategory/p1> ; data: {
    activities = "<relationship fault: 0x8dc0520 'activities'>";
    name = WORKPLACE;
})
2014-03-03 13:08:24.342 EntitiesAndRelationships[323:a0b] Title of row is <WMDGCategory: 0x8ac0c20> (entity: WMDGCategory; id: 0x8ac4640 <x-coredata://126C2FFD-8184-43B1-AA4D-AEFBE1AAC1A1/WMDGCategory/p2> ; data: {
    activities = "<relationship fault: 0x8ad7ca0 'activities'>";
    name = Sports;
})
2014-03-03 13:08:29.393 EntitiesAndRelationships[323:a0b] Title of row is <WMDGCategory: 0x8ac0e00> (entity: WMDGCategory; id: 0x8ac4730 <x-coredata://126C2FFD-8184-43B1-AA4D-AEFBE1AAC1A1/WMDGCategory/p1> ; data: {
    activities = "<relationship fault: 0x8dc0520 'activities'>";
    name = WORKPLACE;
})
2014-03-03 13:12:08.187 EntitiesAndRelationships[323:a0b] Category name is (null)
2014-03-03 13:12:08.187 EntitiesAndRelationships[323:a0b] Activity name is Meeting
2014-03-03 13:12:11.077 EntitiesAndRelationships[323:a0b] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8aa4180) → Saving <NSManagedObjectContext (0x8aa4180): *** DEFAULT ***> on *** MAIN THREAD ***
2014-03-03 13:12:11.077 EntitiesAndRelationships[323:a0b] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8aa4180) → Save Parents? 1
2014-03-03 13:12:11.078 EntitiesAndRelationships[323:a0b] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8aa4180) → Save Synchronously? 1
2014-03-03 13:12:11.078 EntitiesAndRelationships[323:a0b] -[NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0x8aa4180) Context DEFAULT is about to save. Obtaining permanent IDs for new 1 inserted objects
2014-03-03 13:12:11.081 EntitiesAndRelationships[323:a0b] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8dadea0) → Saving <NSManagedObjectContext (0x8dadea0): *** BACKGROUND SAVING (ROOT) ***> on *** MAIN THREAD ***
2014-03-03 13:12:11.082 EntitiesAndRelationships[323:a0b] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8dadea0) → Save Parents? 1
2014-03-03 13:12:11.082 EntitiesAndRelationships[323:a0b] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8dadea0) → Save Synchronously? 1
2014-03-03 13:12:11.083 EntitiesAndRelationships[323:a0b] -[NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0x8dadea0) Context BACKGROUND SAVING (ROOT) is about to save. Obtaining permanent IDs for new 1 inserted objects
2014-03-03 13:12:11.085 EntitiesAndRelationships[323:a0b] __70-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:]_block_invoke25(0x8dadea0) → Finished saving: <NSManagedObjectContext (0x8dadea0): *** BACKGROUND SAVING (ROOT) ***> on *** MAIN THREAD ***
2014-03-03 13:12:11.088 EntitiesAndRelationships[323:a0b] CoreData: error: (NSFetchedResultsController) object <WMDGActivity: 0x8aabff0> (entity: WMDGActivity; id: 0x8aac930 <x-coredata://126C2FFD-8184-43B1-AA4D-AEFBE1AAC1A1/WMDGActivity/p1> ; data: {
    category = nil;
    name = Programming;
    toCategory = nil;
}) returned nil value for section name key path 'toCategory.name'. Object will be placed in unnamed section
2014-03-03 13:12:11.088 EntitiesAndRelationships[323:a0b] CoreData: error: (NSFetchedResultsController) object <WMDGActivity: 0x8aad520> (entity: WMDGActivity; id: 0x8aac940 <x-coredata://126C2FFD-8184-43B1-AA4D-AEFBE1AAC1A1/WMDGActivity/p2> ; data: {
    category = nil;
    name = "New Workplace Activity";
    toCategory = nil;
}) returned nil value for section name key path 'toCategory.name'. Object will be placed in unnamed section
2014-03-03 13:12:11.097 EntitiesAndRelationships[323:a0b] CoreData: error: (NSFetchedResultsController) object <WMDGActivity: 0x8a87970> (entity: WMDGActivity; id: 0x8acabc0 <x-coredata://126C2FFD-8184-43B1-AA4D-AEFBE1AAC1A1/WMDGActivity/p3> ; data: {
    category = nil;
    name = Meeting;
    toCategory = nil;
}) returned nil value for section name key path 'toCategory.name'. Object will be placed in unnamed section
- (IBAction)saveButton:(UIBarButtonItem *)sender
{
    if (self.activityField.text.length > 0)
    {

        if (self.categoryLabel.text.length < 1)
        {
            self.thisCategory.name = @"Uncategorized";
        }

        else
        {
        self.thisCategory.name = self.categoryLabel.text;
        self.thisActivity.name = self.activityField.text;
        self.thisActivity.toCategory.name = self.thisCategory.name;

        NSLog(@"Category name is %@", self.thisCategory.name);
        NSLog(@"Activity name is %@", self.thisActivity.name);
        }


        [self.delegate addViewControllerDidSave];

    }

    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No activity entered"
                                                        message:@"Please enter a new activity or Cancel"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
    }

}
category = nil;
name = Zoomba;
toCategory = nil;