核心数据实体关系在启动之间不会保存

2024-06-23

我正在编写一个应用程序,它有四个主要实体,它们都通过关系链接。有些是一对一,有些是一对多。初始加载时,三个实体从本地存储的 XML 文件加载数据到应用程序,其中一个实体从 Web 下载 XML 并从中加载数据。当应用程序加载时,它会执行检查以查看每个文件中的数据是否比当前拥有的数据更新,如果是,它将用相应文件中的数据替换该实体中的所有当前数据。

作为写作过程中调试过程的一部分,我一直在强制删除所有数据。当调用删除函数并在应用程序启动时加载所有数据时,应用程序运行良好,并且所有实体和关系都按照其应有的方式运行。但是,当我删除对删除函数的调用并执行检查并尝试从其存储的数据运行时,所有关系似乎都消失了。在调试过程中,我发现所有实体确实包含它们应该包含的所有常规数据,只是它们不再具有关系。我不明白为什么在第一次加载时会保存关系,但在不重新导入所有数据时不会保留关系。

我想一些代码会对任何调试都有帮助,但是,我不确定应该包含多少。因此,我将首先仅包含数据加载类中调用的方法之一。如果还有什么可以帮助的,请告诉我。很感谢任何形式的帮助。

更新代码:2011 年 2 月 25 日(基于建议 - 问题仍然存在) 更新代码:2011 年 2 月 25 日 - 问题已解决

- (NSArray *) loadFeatures {

    if ([self checkForUpdate:@"Features"]) {

        [self deleteAllObjects:@"Features"];

        NSString *filePath = [self dataFilePath:FALSE withResourceName:@"Features"];
        NSData *xmlData = [[NSMutableData alloc] initWithContentsOfFile:filePath];
        NSError *error;
        GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error];

        NSArray *featureElements = [doc.rootElement elementsForName:@"FEATURE"];
        NSMutableSet *featureSections = [[NSMutableSet alloc] init];

        for (GDataXMLElement *featureElement in featureElements) {

            NSString *featureName = nil;
            NSNumber *featureSecure = nil;
            NSNumber *featureID = nil;
            NSNumber *featureSortKey = nil;
            DisplayTypes *featureDisplayType = nil;

            NSArray *names = [featureElement elementsForName:@"NAME"];
            if (names.count > 0) {
                GDataXMLElement *firstName = (GDataXMLElement *) [names objectAtIndex:0];
                featureName = firstName.stringValue;
            } else continue;

            NSArray *secures = [featureElement elementsForName:@"SECURE"];
            if (secures.count > 0) {
                GDataXMLElement *firstSecure = (GDataXMLElement *) [secures objectAtIndex:0];
                featureSecure = [NSNumber numberWithInt:firstSecure.stringValue.intValue];
            } else continue;

            NSArray *featureIDs = [featureElement elementsForName:@"FEATUREID"];
            if (featureIDs.count > 0) {
                GDataXMLElement *firstFeatureID = (GDataXMLElement *) [featureIDs objectAtIndex:0];
                featureID = [NSNumber numberWithInt:firstFeatureID.stringValue.intValue];
            }

            NSArray *featureSortKeys = [featureElement elementsForName:@"SORTKEY"];
            if (featureSortKeys.count > 0) {
                GDataXMLElement *firstSortKey = (GDataXMLElement *) [featureSortKeys objectAtIndex:0];
                featureSortKey = [NSNumber numberWithInt:firstSortKey.stringValue.intValue];
            }

            NSArray *featureDisplays = [featureElement elementsForName:@"DISPLAYTYPEID"];
            if (featureDisplays.count > 0) {
                GDataXMLElement *firstFeatureDisplay = (GDataXMLElement *) [featureDisplays objectAtIndex:0];

                for (DisplayTypes *thisDisplayType in self.displayTypes) {
                    if (thisDisplayType.displayTypeID == [NSNumber numberWithInt:firstFeatureDisplay.stringValue.intValue]) {
                        featureDisplayType = thisDisplayType;
                    }
                }
            }

            NSArray *sectionElements = [featureElement elementsForName:@"SECTIONS"];


            for (GDataXMLElement *sectionElement in sectionElements) {

                NSArray *sectionIDs = [sectionElement elementsForName:@"SECTION"];

                for (GDataXMLElement *sectionID in sectionIDs) {
                    NSArray *thisSectionIDs = [sectionID elementsForName:@"SECTIONID"];
                    if ([thisSectionIDs count]) {
                        GDataXMLElement *thisSectionID = (GDataXMLElement *) [thisSectionIDs objectAtIndex:0];

                        for (Sections *thisSection in self.sections) {

                            if ([thisSection.sectionID isEqualToNumber:[NSNumber numberWithInt:thisSectionID.stringValue.intValue]]) {
                                [featureSections addObject:thisSection];
                            }

                        }
                    }
                }
            }


            NSManagedObjectContext *context = [self managedObjectContext];
            NSManagedObject *featureInfo = [NSEntityDescription insertNewObjectForEntityForName:@"Features" inManagedObjectContext:context];
            [featureInfo setValue:featureName forKey:@"name"];
            [featureInfo setValue:featureSecure forKey:@"secure"];
            [featureInfo setValue:featureID forKey:@"featureID"];
            [featureInfo setValue:featureSortKey forKey:@"sortKey"];
            [featureInfo setValue:featureDisplayType forKey:@"display"];
            [[featureInfo mutableSetValueForKey:@"section"] unionSet:featureSections];

            NSError *error;
            if (![context save:&error]) {
                NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
            }

            [[self.managedObjectContext objectWithID:featureDisplayType.objectID] addFeatureObject:featureInfo];
            [self.managedObjectContext save:&error];

            [featureSections removeAllObjects];


        }

        [xmlData release];
        [doc release];
        [featureSections release];

    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Features" inManagedObjectContext:[self managedObjectContext]];
    [fetchRequest setEntity:entity];

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

    [fetchRequest release];

    return featureArray;

}

更新:2011 年 5 月 25 日

根据要求,我发布了一些屏幕截图。

1)这是在删除所有数据且关系完好后加载应用程序时得到的结果

2)这是当应用程序再次运行而没有先删除和重新加载数据时我得到的结果。底部的选项卡由其中一个实体创建,并且标题略有不同。发生这种情况是因为与 DisplayType 的关系不存在,并且它不知道要加载什么类型的视图控制器,也不知道要为选项卡使用哪个图标。


通常,您不需要显式设置关系的双方。当您处理一对多关系时,一次向集合中添加一个实体可能比一次设置所有集合更安全。所以,而不是:

[featureInfo setValue:[NSSet setWithSet:featureSections] forKey:@"section"];

我会循环遍历featureSections将每个对象一一设置并添加到section的关系Feature实体,例如:

for (Sections *aSection in featureSections) {
    // use the automatically-generated relationship mutator         
    [featureInfo addSectionsObject:aSection];
}

我希望这有帮助...

否则,本节 http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdUsingMOs.html#//apple_ref/doc/uid/TP40001803-SW3Apple 文档中的内容可能会令人感兴趣。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

核心数据实体关系在启动之间不会保存 的相关文章

  • NSMutableArray enumerateObjectsUsingBlock 并不像苹果所说的同步

    这是一个错误吗 我有这样的行 myArray enumerateObjectsUsingBlock id obj NSUInteger idx BOOL stop NSLog d idx NSLog end 这应该像这样打印 0 1 2 e
  • Swift PerformSegueWithIdentifier 不起作用

    我试图在用户成功登录其帐户后切换视图控制器 但它无法正常工作 我无法直接使用 segue 因为如果单击登录按钮 无论信息是否正确 它都会转到该视图控制器 我已经尝试了我所知道的一切 但没有成功 这是我正在尝试的代码 IBAction fun
  • 如何在 AVCaptureVideoPreviewLayer 上添加叠加层?

    我正在使用 Swift 构建一个 iOS 应用程序 它需要二维码扫描仪功能 我已经使用 AVFoundation 实现了 QR 码扫描仪 现在我的捕获屏幕看起来与视频录制屏幕相同 即AVCaptureVideoPreviewLayer显示相
  • UIWebview JS 性能比 iOS 6/7 上的移动 safari 慢吗?

    我们最近使用 iOS 应用程序中的大量 JavaScript 库测试了一些 HTML5 内容 该应用程序旨在在 UIWebview 中加载这些内容 本次测试使用了 iOS 6 我的团队没有观察到移动 Safari 浏览器出现任何明显的性能问
  • 用于 iOS 搜索的 Facebook Graph API

    我尝试使用以下代码从 Graph API 中搜索地点 但没有成功 有人可以启发我的道路吗 如果我尝试发布链接 消息 照片 它会按预期工作 但是当尝试获取位置时 它总是失败并给我 The operation couldn t be compl
  • 将警报视图“是”按钮设置为粗体,将“否”按钮设置为正常

    我有警报视图 其中有 是 和 否 选项 看起来像下面这样 使用的代码是 UIAlertView confAl UIAlertView alloc initWithTitle message Are you sure delegate sel
  • iPhone通讯录:如何获取仅包含电话号码的联系人列表?

    我想获取所有具有电话号码的 ABContacts 的列表 并且仅获取这些联系人 我不想显示任何仅包含电子邮件的联系人 Android 有一个名为 HAS PHNONE NUMBER 的字段 您可以查询该字段 但我没有在 iPhone 上看到
  • ios - 安排无限数量的本地通知

    我有一个应用程序 允许用户创建重复事件 每一个事件在一天中的特定时间可能有也可能没有提醒 警报 如果有的话 应用程序会发送一个本地通知在一天中的那个时候 事件存储在CoreData Event name Go to London date
  • UIStackView - 拖动以重新排序排列的子视图?

    我试图获得一些关于如何实现在 a 上发现的相同类型的 拖动重新排序 行为的建议 UITableView但在一个UIStackView 到目前为止 这就是我的想法 为每个按钮添加一个长按手势识别器arrangedSubviews 长按时 添加
  • TDD VS BDD:REST 服务

    我对 TDD 与 BDD 很困惑 TDD 和 BDD 在以下各点上有何不同 开发 先测试用例 再开发 RestService HTTP 不进行休息调用 如果是这样 a 我们是否使用模拟对象仅返回硬编码的 json b 如何处理 REST 调
  • 为 iPhone 企业开发者计划发布应用程序

    如果我参加了员工人数超过 500 人的公司的 iPhone 企业开发人员计划 我是否仍需要在应用程序商店上发布我的应用程序 以便客户安装该应用程序 如果您不打算将应用程序发布到 App Store 那就不要这样做 iPhone 企业开发者计
  • YouTube 嵌入 AirPlay UIWebView

    我正在开发一个视频应用程序 其中包含来自不同来源的大量视频 应用程序中的选项之一必须是通过电视上的 Airplay 播放视频 为了在我的应用程序中显示 YouTube 视频 我使用 YTPlayerView 它是 YouTube API 的
  • 设置视图控制器根视图的外观代理

    使用 UIAppearance 时是否可以仅针对视图控制器的根视图 我想从我的应用程序委托中为所有控制器设置背景颜色 但只想定位视图控制器上的直接视图 谢谢 详细来说 每个 UIViewController 子类都有自己的 UIView 对
  • 如何将文本从文本字段发送到另一个视图控制器

    我正在制作一个应用程序 其行为类似于 iPhone 中的默认 Messages app 用户可以在其中编写短信UITextField点击 发送 按钮后 该值UITextField in ComposeViewController将被转移到表
  • 以编程方式使后退按钮转到上一个视图

    我有一个 UIBarButtonItem 并且想以编程方式设置转到前一个控制器的操作 在我的例子中 我之前的视图是 UITableViewController 下面是我当前用来制作栏按钮项目的代码 尽管该按钮尚未转到上一个视图 UIBarB
  • 动画完成后 CABasicAnimation 重置为初始值

    我正在旋转 CALayer 并尝试在动画完成后将其停止在最终位置 但动画完成后 它会重置到初始位置 xcode 文档明确指出动画不会更新属性的值 任何如何实现这一目标的建议 这就是答案 它是我的答案和克里希南的答案的结合 cabasican
  • 如何获取 NSTextStorage/NSString 中的单词数?

    所以我的问题基本上是如何获取 NSTextStorage NSString 中的单词数 我不需要字符长度 而是单词长度 谢谢 如果您使用的是 10 6 或更高版本 以下可能是最简单的解决方案 NSUInteger numberOfWords
  • 如何在 Cocoa 中将 NSString 转换为 unsigned int?

    我的申请收到了NSString含有一个unsigned int NSString 没有 myString unsignedIntegerValue 方法 我希望能够从字符串中取出值而不破坏它 然后将其放入NSNumber 我正在尝试这样做
  • Ionic 3 Deeplinking - 从 URL 启动应用程序

    我正在使用 Ionic 开发一个跨平台应用程序 当尝试实现深度链接时 我安装了一个名为 Ionic Native 插件深层链接 我运行了这些命令 ionic cordova plugin add ionic plugin deeplinks
  • 在iOS上,setNeedsDisplay确实不会导致drawRect被调用...除非CALayer的display或drawInContext最终调用了drawRect?

    我不太明白 CALayer 是怎么做的display and drawInContext与 有关drawRect视图中 如果我有一个 NSTimer 来设置 self view setNeedsDisplay 每 1 秒 然后drawRec

随机推荐

  • 将一个范围分组到一个范围

    我有一张桌子 tblUnit ID Name PriceFrom PriceTo 1 Audi 170 340 2 BMW 250 290 3 Ford 275 500 4 Kia 110 250 5 VW 135 460 然后我预先定义了
  • 如何在 Lumen 中使用辅助函数?

    credentials app path 结果是 Symfony Component Debug Exception FatalThrowableError 调用 未定义函数 App LtClasses app path 但它在这里被列为助
  • 如何为使用 NPOI 创建的 Excel 中的单元格设置验证

    我使用以下命令创建了一个 excel 文件NPOI使用以下代码 var workbook new HSSFWorkbook var sheet workbook CreateSheet Candidate Add header labels
  • 声明内容提供商

    这是我第一次使用内容提供商 但我遵循了开发者文档 http developer android com guide topics providers content providers html但是当我运行该程序时它告诉我failed to
  • TypeScript 中的“const”关键字

    为什么 TypeScript 中类成员不能有 const 关键字 我在以下位置找不到任何有关它的有用信息TypeScript 文档网站 http www typescriptlang org Handbook classes 为什么 Typ
  • Oracle - 如何向用户授予对另一个用户的对象的权限

    我需要授予用户 TARGETUSER 选择 插入 更新用户 SOURCEUSER 的所有表的权限 我可以从here https stackoverflow com questions 187886 grant select on all t
  • 从超类调用方法

    你好 我试图通过子类从超类调用方法 但不断收到错误 我试图调用的方法是setDestination 但是编译器一直给我错误 找不到符号 方法 setDestination java lang string 我的讲师说这是方法调用的参数和方法
  • Android:微调器未显示所选值

    我有一个微调器和下拉列表 微调器的值是从 JSON 解析中获取的 我的问题是该值设置到微调器中 但是当我从下拉列表中选择一个值时 它不会在选定的微调器中显示 它总是空白的 我将微调器初始化为 final Spinner spinner Sp
  • 有没有办法使用 s3.putbucketreplication API 为 AWS S3 复制管理启用 ReplicationConfiguration?

    我正在尝试通过 s3 putbucketreplication api 启用复制配置 我正进入 状态 InvalidRequest 优先级不能用于此版本的跨区域复制配置架构 请参阅 S3 开发人员指南了解更多信息 错误 这是什么意思 var
  • 有进度的 Firebase 存储下载文件不会“实时”触发(Unity、C#)

    尝试从 firebase 存储下载文件 效果很好 但我的进度没有 实时 更新 当我调试 记录我的进度时 所有调试消息都会在下载完成时打印在控制台中 而不是在下载过程中打印 在工作中 我的互联网连接要好得多 看起来好像按预期工作 但在家里我有
  • 将亚马逊 MWS 暂存器查询转换为 API 调用

    我想知道是否有办法转换我的亚马逊 MWS便笺 https mws amazonservices co uk scratchpad index html对 API 调用的查询 例如使用 MWS 暂存器时 我会得到一个要签名的字符串 mws a
  • Linux 内核模块中的文件 I/O

    我正在编写一个需要打开和读取文件的 Linux 内核模块 实现这一目标的最佳方法是什么 我能问一下你为什么要打开文件吗 我喜欢关注Linux开发 出于好奇 我不是内核开发人员 我是做Java的 而且我以前看过关于这个问题的讨论 我找到了一个
  • 即使类位于包中,也无法从 tomcat 服务器运行我的 servlet

    我正在尝试让我的 servlet 运行 我已经搜索了 2 天并尝试了所有可能的解决方案 但没有成功 servet 类位于适当的文件夹中 即在包名称下 我还将 servlet 中所需的 jar 文件添加到 lib 文件夹中 web xml 文
  • Class.getResource 和 ClassLoader.getSystemResource:是否有理由选择其中之一?

    我都看到了Class getResource and ClassLoader getSystemResource用于在 Java 中定位资源 有什么理由更喜欢其中一个而不是另一个 加载资源有多种方式 每种方式的含义略有不同 ClassLoa
  • 协作投票算法的用户分布

    我的应用程序 实际上是一个游戏 的用户回答问题即可获得积分 问题由其他用户提供 由于数量有限 我无法亲自检查所有内容 因此我决定将过滤过程众包给用户 玩家 规则很简单 每个用户都会看到一个问题来评价好 坏 不确定 当问题被评为 差 5 次时
  • 在 SQL Developer 中设置 sybase DB 连接?

    我们可以使用 SQL Developer 连接到 sybase 数据库服务器吗 如果是的话我们需要进行哪些配置设置 我们可以在Oracle目录中使用相同的tnsname ora文件还是需要单独安装sybase客户端来获取连接信息 在 Ora
  • 客户端设置了 multipart/form-data 请求的文件部分的内容类型错误

    我正在尝试发送multipart form data使用以下 JavaScript 和 jQuery var formData new FormData formData append projectName projectNameInpu
  • SRC_URI 在 bitabake 配方中不起作用

    我创建了一个用于安装的 bitbake 配方https pypi python org pypi Adafruit GPIO 1 0 3 https pypi python org pypi Adafruit GPIO 1 0 3蟒蛇包 以
  • 使用制表符作为空格时删除制表符

    我知道一般的制表符与空格的关系由来已久 并且主要取决于个人喜好 坚持团队的风格 我只是想问一个有关在 Visual Studio 中使用空格的实际问题 关于选项卡的某些事情让我烦恼 当我们是一个小团队时 我不介意更改为空格 这对于首先编写代
  • 核心数据实体关系在启动之间不会保存

    我正在编写一个应用程序 它有四个主要实体 它们都通过关系链接 有些是一对一 有些是一对多 初始加载时 三个实体从本地存储的 XML 文件加载数据到应用程序 其中一个实体从 Web 下载 XML 并从中加载数据 当应用程序加载时 它会执行检查