IOS Coredata UNIQUE 约束失败:

2024-02-28

我正在尝试将数据插入 coredata 但出现错误,例如,

CoreData:错误:(1555)唯一约束失败:ZSIDETABLENAME.Z_PK

设想 :-

首先:从 appdelegate.m 我将数据从 SQL 文件复制到文档目录的 sql 文件。

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }


   //  Create the coordinator and store

        NSString* from;
        NSString* to;
        NSArray* mainPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [mainPath objectAtIndex:0]; // Get documents folder
        /*VoiceRecords.plist file*/
        from=[[NSBundle mainBundle]pathForResource:@"News" ofType:@"sqlite"];
        to=[documentsDirectory stringByAppendingPathComponent:@"News.sqlite"];
        [[NSFileManager defaultManager]copyItemAtPath:from
                                               toPath:to error:nil];
        from=nil;
        to=nil;

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"News.sqlite"];

    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
        /*
         Replace this implementation with code to handle the error appropriately.

         abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.

         Typical reasons for an error here include:
         * The persistent store is not accessible;
         * The schema for the persistent store is incompatible with current managed object model.
         Check the error message to determine what the actual problem was.


         If the persistent store is not accessible, there is typically something wrong with the file path. Often, a file URL is pointing into the application's resources directory instead of a writeable directory.

         If you encounter schema incompatibility errors during development, you can reduce their frequency by:
         * Simply deleting the existing store:
         [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]

         * Performing automatic lightweight migration by passing the following dictionary as the options parameter:
         @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES}

         Lightweight migration will only work for a limited set of schema changes; consult "Core Data Model Versioning and Data Migration Programming Guide" for details.

         */
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    return _persistentStoreCoordinator;
}

它工作正常。然后我尝试将用户输入的 url 保存在 mainviewcontroller.m 的 coredata 中。

- (void)feedParserDidFinish:(MWFeedParser *)parser {

        NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"IWorld"];
                fetchRequest.predicate = [NSPredicate predicateWithFormat:@"feedurl = %@", self.Feedlink];
        NSManagedObjectContext *context = [self managedObjectContext];

      if ([[context executeFetchRequest:fetchRequest error:NULL] count] == 0) {
                NSError *error = nil;

            NSPredicate *predicate=[NSPredicate predicateWithFormat:@"feedurl contains %@",check];
            [fetchRequest setPredicate:predicate];
              NSMutableArray *checkp = [[context executeFetchRequest:fetchRequest error:&error]mutableCopy];


            if (checkp.count<=0) {
                NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"IWorld" inManagedObjectContext:context];
                [newDevice setValue:self.Name forKey:@"name"];
                [newDevice setValue:self.WebsiteName forKey:@"websitename"];
                [newDevice setValue:self.Feedlink forKey:@"feedurl"];

                                   // Save the object to persistent store
                if (![context save:&error]) {
                    NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
                }
                    //Save value in lockbox

                NSArray *keys = [[[newDevice entity] attributesByName] allKeys];
                NSDictionary *dict = [newDevice dictionaryWithValuesForKeys:keys];

            }

        }


     NSFetchRequest *fetchrequestforside=[NSFetchRequest fetchRequestWithEntityName:@"Sidetablename"]; //Sidetablename is entity
    fetchrequestforside.predicate=[NSPredicate predicateWithFormat:@"feedurl = %@", self.Feedlink];
             NSManagedObjectContext *context = [self managedObjectContext];
    if ([[context executeFetchRequest:fetchrequestforside error:NULL] count] == 0) {
                    // Create a new managed object

                    NSError *error = nil;

                    NSPredicate *predicate=[NSPredicate predicateWithFormat:@"feedurl contains %@",check ]; //check is urlstring
                    [fetchrequestforside setPredicate:predicate];
                    NSMutableArray *checkp = [[context executeFetchRequest:fetchrequestforside error:&error]mutableCopy];


                    if (checkp.count<=0) //if coredata will find url then notstore in coredata else stored procedure
          {

                    NSManagedObject *newDevice1 = [NSEntityDescription insertNewObjectForEntityForName:@"Sidetablename" inManagedObjectContext:context];

                    if (self.Name)
                    {
                        [newDevice1 setValue:self.Name forKey:@"name"];


                    }
                    if (self.WebsiteName)
                    {
                        [newDevice1 setValue:self.WebsiteName forKey:@"websitename"];

                    }

                    if (self.Feedlink)
                    {
                        [newDevice1 setValue:self.Feedlink forKey:@"feedurl"];

                    }




                    NSError *error = nil;
                    if (![context save:&error]) {
                            NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); // Getting error here through nslog //CoreData: error: (1555) UNIQUE constraint failed: ZSIDETABLENAME.Z_PK

                        }

注意:这一切都是第一次发生。第二次当我运行应用程序时一切正常。不知道问题出在哪里?


您在 sidetablename 表上遇到主键约束冲突。

因此,我相信您的问题在于您如何创建和复制种子数据库。

不幸的是,您没有提供该信息。因此,我只是猜测你是如何做到的。

我假设您使用 Mac 应用程序创建了数据库,或者在 iOS 模拟器中创建了数据库。然后,您将 sqlite 文件从创建它的位置复制到捆绑资源中。

由于自 iOS/OSX 7/10.9 以来 WAL 一直是默认模式,因此我假设您在 WAL 模式下创建了种子数据库。这意味着您可能错过了 -wal 和 -shm 文件。如果您指定任何数据属性应使用外部存储,那么您也会错过该数据。

创建要复制的种子数据库时,还需要复制 -shm/wal 文件,或者需要以回滚日志模式创建数据库,这将在文件中包含所有添加的数据。

您可以通过在添加持久性存储时设置以下选项来实现这一点(如果您已经使用选项,只需将此选项与其他选项合并即可)。

NSDictionary *options = @{NSSQLitePragmasOption:@{@"journal_mode":@"DELETE"}};
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                              configuration:nil
                                                        URL:storeURL
                                                    options:options
                                                      error:&error]) {
    // Handle error
}

这是在创建要复制到捆绑包的数据库时添加持久性存储的方式。它将确保所有内容都在实际的数据库文件中。

现在,运行代码创建种子文件后,您应该转到该目录并查看是否还有其他文件。最好的方法是在终端中。转到该目录并执行“ls -lat”,这将列出按时间排序的所有文件。

Caveat:SQLite 和 Core Data 都可以创建与 sqlite 文件一起使用的额外文件,具体取决于两个实体的配置。因此,一般来说,您应该将每个核心数据持久存储视为一个文件包。换句话说,您应该仅为核心数据存储创建一个单独的目录。这样,当 SQLite 或 core data 决定创建额外文件时,所有内容都被限制在一个目录中。

当您将文件复制到创建种子数据库的捆绑资源中时,您需要确保复制所有内容。

同样,部署时您应该将捆绑包中的所有内容复制到设备。

但是,您应该考虑使用这些方法,而不是使用文件系统NSPersistentStoreCoordinator...

/* Used for save as - performance may vary depending on the type of old and
   new store; the old store is usually removed from the coordinator by the
   migration operation, and therefore is no longer a useful reference after
   invoking this method
*/
- (NSPersistentStore *)migratePersistentStore:(NSPersistentStore *)store
                                        toURL:(NSURL *)URL
                                      options:(nullable NSDictionary *)options
                                     withType:(NSString *)storeType
                                        error:(NSError **)error;

/* copy or overwrite the target persistent store in accordance with the store
   class's requirements.  It is important to pass similar options as
   addPersistentStoreWithType: ... SQLite stores will honor file locks, journal
   files, journaling modes, and other intricacies.  Other stores will default
   to using NSFileManager.
 */
- (BOOL)replacePersistentStoreAtURL:(NSURL *)destinationURL
                 destinationOptions:(nullable NSDictionary *)destinationOptions
         withPersistentStoreFromURL:(NSURL *)sourceURL
                      sourceOptions:(nullable NSDictionary *)sourceOptions
                          storeType:(NSString *)storeType
                              error:(NSError**)error NS_AVAILABLE(10_11, 9_0);

因此,我相信,如果您正确创建数据库,然后将其完全正确地复制到资源包和应用程序中,那么您的问题就会消失。

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

IOS Coredata UNIQUE 约束失败: 的相关文章

  • 解包可选值时意外发现 nil - 使用 ALAMOFIRE

    我正在尝试使用 Alamofire 获取 JSON 格式的数据 当我使用一个 URL 时 它工作正常 当我使用另一个 URL 时 我在解包可选值时收到错误 我似乎无法追踪错误来自哪里 我已采取将代码放入 ViewDidLoad 来跟踪错误
  • 了解 React Native 中的默认字体大小

    在过去的几个月里 我一直在开发一个 React Native 应用程序 但有些事情总是让我困惑 而我现在正试图弄清楚它的真相 我正在尝试标准化应用程序中的字体大小 正文 标题等 并且正在努力了解 React Native 究竟从哪里获取默认
  • 从基元创建自定义形状

    我正在尝试通过组合原始形状来创建自定义物理形状 目标是创建一个圆形立方体 合适的方法似乎是初始化 形状 变换 我在这里找到的https developer apple com library prerelease ios documenta
  • 在后台每 X 分钟执行一次函数不起作用

    我使用此代码每 X 分钟执行一次函数 void executeEveryOneMinute self myFunction dispatch after dispatch time DISPATCH TIME NOW int64 t 60
  • 使用 iPhone 控制蓝牙音频设备

    我正在寻找为 iPhone 编写应用程序 它将能够控制汽车中的收音机和 CD 播放器 收音机和播放器具有可用的蓝牙连接 我开始这个问题是为了获得这个地方所需的所有信息 我有几个问题 但如果您发现任何我没有要求的对我开始开发此应用程序不重要的
  • 如何读取 Xcode 6.1 Instruments .trace 文件?

    我一直在尝试阅读 trace文件 我使用生成的custom仪器模板 仪器 自动机 分配 Leaks using 仪器 https developer apple com library mac documentation Developer
  • swift 中闭包和函数作为参数的区别

    我有将近 4 年的 Objective C 经验 并且是 swift 的新手 我试图从 Objective C 的角度理解 swift 的概念 所以如果我错了 请指导我 在目标 c 中 我们有块 可以稍后异步执行的代码块 这绝对是完全合理的
  • 在 UIView 中绘制彩色文本 -drawRect: 方法

    我正在尝试在我的中绘制彩色文本UIView子类 现在我正在使用单视图应用程序模板 用于测试 除了以下内容外 没有任何修改drawRect method 文本已绘制 但无论我将颜色设置为什么 它始终是黑色的 void drawRect CGR
  • 在 insertMethod 应用程序中使用 Core Data 会崩溃并给出 NSInternalInconsistencyException 并显示错误消息 Context已经有一个协调器

    我正在 xcode 4 2 中的 insertMethod 在 MasterViewController m 类中 实现一个核心数据示例 我的应用程序崩溃了NSInternalInconsistencyException 和错误消息 Con
  • 以编程方式检测应用程序是否正在设备或模拟器上运行

    我想知道我的应用程序在运行时是在设备还是模拟器上运行 有没有办法检测到这一点 原因是用模拟器测试蓝牙 api http volcore limbicsoft com 2009 09 iphone os 31 gamekit pt 1 woo
  • ExpandableLabel iOS 中的“少看”

    我正在使用第三方库可扩展标签 https github com apploft ExpandableLabel实施一个see more特征 我正在寻找仅快速的解决方案 其中包含标签中的文本而不是按钮中的文本 因此这可以完美地工作 添加库并更
  • TableView 中图像的大小不正确

    我正在使用来自 URL 的图像创建一个表视图 但图像不会调整到所有视图的大小 直到我将其按入行中 知道为什么会发生这种情况吗 这是一个自定义的表格视图 我的代码是 UITableViewCell tableView UITableView
  • iOS:我如何知道某个属性是否符合 KVO 标准?

    In the 键值观察编程指南 https developer apple com library archive documentation Cocoa Conceptual KeyValueObserving KeyValueObser
  • CIAdditionCompositing 给出不正确的效果

    我正在尝试通过平均其他几个图像来创建图像 为了实现这一点 我首先将每个图像变暗 其系数等于我平均的图像数量 func darkenImage by multiplier CGFloat gt CIImage let divImage CII
  • 禁用 iPhone 4S / 新 iPad 键盘上的听写按钮

    我们的应用程序是一个医疗保健应用程序 我们的应用程序中有一个符合 HIPAA 标准的语音识别器 所有听写都可以通过它进行 医院不希望医生意外开始与不符合 HIPAA 标准的 Nuance Dragon 服务器进行对话 因此 我正在寻找可以抑
  • 使用 NSFileHandle 覆盖数据

    使用 NSFileHandle 使用 truncateFileAtOffset 从文件末尾删除 n 个字符非常容易 void removeCharacters int numberOfCharacters fromEndOfFile NSF
  • GoogleSignIn ios 附加到谷歌表格

    我目前正在开发一个 iOS 应用程序 该应用程序需要写入登录用户拥有的 Google 工作表 要登录我正在使用的用户GoogleSignInpod 并附加到我正在使用的谷歌表GoogleAPIClientForREST Sheets pod
  • 如何检测 UISearchBar/UITextField 输入中的暂停?

    我有以下 UISearchbar 代码 void searchBar UISearchBar searchBar textDidChange NSString searchText UIApplication sharedApplicati
  • 在iOS中设置框架的原点

    我正在尝试以编程方式设置框架的原点 Method1 button frame origin y 100 方法二 CGRect frame button frame frame origin y 100 我尝试了方法 1 但它不起作用 显示错
  • 我如何用 javascript/jquery 进行两指拖动?

    我正在尝试创建当有两个手指放在 div 上时拖动 div 的功能 我已将 div 绑定到 touchstart 和 touchmove 事件 我只是不确定如何编写这些函数 就像是if event originalEvent targetTo

随机推荐

  • Xcode 13 - 无法打开“/Users/test.xcodeproj”中的项目,因为它采用未来的 Xcode 项目文件格式

    在 Xcode 12 5 中打开使用 Xcode13 创建的项目时 我收到以下错误消息 无法打开位于 Users xcodeproj 的项目 因为它是未来的Xcode项目文件格式 使用兼容版本的Xcode调整项目格式 以允许该版本的Xcod
  • 对真实输入数据进行高效的 2D FFT?

    我目前正在使用 opencl 对真实输入数据实现二维 FFT 更具体地说是使用 FFT 的快速 2D 卷积 所以我只需要一些行为足够相似的东西来应用卷积 2D FFT 是在行上使用 1D FFT 然后在列上使用 1D FFT 来实现的 为了
  • 以另一种形式运行过程

    我有一个表单 运行一个在 Outlook 中创建电子邮件并向其附加 pdf 的过程 它的记录源是不可更新的查询 该程序运行良好 我现在想从另一种形式运行该过程 但我不断收到一条消息 说它无法完成 因为记录源不可更新 新形式的编码为 Priv
  • 如何在 Android 手机启动时打开我的 Android 应用程序? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在启动时启动应用程序 https stackoverflow com questions 6391902 how to start an application on startup 我是 And
  • Oracle 函数:复制 wm_concat

    我目前正在 Crystal Reports 中从事一个项目 该项目拒绝使用未记录的函数 WM CONCAT 而该函数在 Oracle 10g 中是允许的 这里是WM CONCAT头信息 WM CONCAT p1 IN VARCHAR2 RE
  • 无法在 ASP.NET Zero 中启用实体历史记录

    我正在使用 ASP NET 零 项目版本 5 1 0和 NET Core 2 0 模板 我正在尝试为我的实体启用实体历史记录 以便我可以查看表中已删除的列值和旧的列值 实体类 Table TestingEntity Audited publ
  • 查找表中的重复行[重复]

    这个问题在这里已经有答案了 我有一个带有这样的表的小型应用程序 tr td img class DeleteButton alt delete src images delete icon png td td class toHide so
  • 如何删除mysql表中的数字字符?

    我有一张桌子 名称为 Actress 在 MySQL 中 我想从列 中删除所有数字字符name select from Actress limit 5 code name 11455 Hanshika Motwani 19 11457 Ka
  • memcached 是否在 Google App Engine 中跨服务器共享?

    在memcached网站上 它说memcached是一个分布式内存缓存 这意味着它可以跨多个服务器运行并保持某种一致性 当我在谷歌应用程序引擎中发出请求时 同一实体组中的请求很可能由同一服务器提供服务 我的问题是 假设有两台服务器为我的请求
  • 为什么 GLSL 的算术函数在 iPad 上与在模拟器上产生如此不同的结果?

    我目前正在寻找在 iOS 设备上运行的 OpenGL ES 2 0 片段着色器代码中的一些错误 代码在模拟器中运行良好 但在 iPad 上它存在巨大问题 并且某些计算产生截然不同的结果 例如我有0 0在 iPad 上和4013 17在模拟器
  • 将 csv 附加到电子邮件 xcode

    我在电子邮件视图中收到了一个有效的 csv 附件 问题是 当我在 iPhone 上打开 csv 时 它会将文件很好地显示在单独的列中 但如果我用 Excel 打开它 它就全部在一个字段中 我需要两列 我该怎么做 尝试用逗号分隔字段 但这不起
  • IPv4 到十进制不同的值?

    为什么 inet pton 和 inet addr 1734763876 的 IPv4 十进制值与使用这 2 个网站 1684366951 得到的值不同 struct sockaddr in sin inet pton AF INET 10
  • Java 类文件的创建是确定性的吗?

    当使用same JDK 即相同的javac可执行文件 生成的类文件总是相同的吗 是否会有差异 具体取决于操作系统 or hardware 除了JDK版本之外 是否还有其他因素导致差异 是否有任何编译器选项可以避免差异 差异仅可能存在于理论上
  • 查找 Active Directory 中特定用户所属的组/分发列表

    假设我在 OU Groups DC contaco DC com ct 我可以找到子 OU 中的所有组 但找到用户 bobdole 所属的所有组的唯一方法是查看每个组 看看他是否在 成员 字段中 不幸的是 当我查看用户 bobdole 时
  • 如何使div的宽度在两个div之间拉伸

    我当前的问题是我有三个 div 元素 一只向左漂浮 一只向右漂浮 一只在两者之间 我希望中心 div 自动拉伸到两个 div 之间可用宽度的最大宽度 HTML div div 1 div div div div 2 div div CSS
  • 控制何时调用静态构造函数

    在我的自定义属性的静态构造函数中 我在加载的程序集中搜索用我的属性修饰的所有类 并对它们执行一些操作 我希望在运行时尽快调用静态构造函数 最好是在执行之前static void Main 入口点 目前 只有在我对属性进行一些调用后才会调用它
  • 是否可以对 jQuery UI 对话框小部件的显示/隐藏方法进行更精细的控制?

    目前 在使用对话框小部件时 我似乎只能以最基本的形式使用效果 例如 以下将使用放置效果来显示和隐藏对话框 dialog dialog show drop hide drop 但是 drop 方法的默认值始终落在左侧 我真正想要的是让它下降到
  • spring security方法级注解应该应用在controller层还是service层?

    我一直在我的控制器方法上使用 Spring Security 和 PreAuthorize 我的理由是 我希望授权检查能够在一层中以可预测的方式进行 并且在请求中尽早进行 但是 我刚刚阅读了 spring security 3 文档 看到他
  • 遍历n*n矩阵的c程序

    我们有一个 n n 矩阵 例如我们取 n 4 矩阵如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 我们必须按顺序遍历它 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 我怎样
  • IOS Coredata UNIQUE 约束失败:

    我正在尝试将数据插入 coredata 但出现错误 例如 CoreData 错误 1555 唯一约束失败 ZSIDETABLENAME Z PK 设想 首先 从 appdelegate m 我将数据从 SQL 文件复制到文档目录的 sql