标签: core-data

非法尝试在不同上下文中的对象之间建立关系'xyz'

我使用Apple的CoreDataBooks示例应用程序作为在后台将数据提取到辅助托管对象上下文的基础,然后将该数据合并到主要托管对象上下文中.

我所Book引入的数据是与Owner实体(称为"所有者")具有一对一关系的实体.该Owner实体与Book(称为"书籍")有很多关系.

我的数据是以下形式的XML文档:

<Owner>
  <Name>alexpreynolds</Name>
  <ID>123456</ID>
</Owner>
<Books>
  <Book>Book One</Book>
  <Book>Book Two</Book>
  ...   
  <Book>Book N</Book>
</Books>
Run Code Online (Sandbox Code Playgroud)

Book Onethrough Book N与one Owner("alexpreynolds, 123456")相关联.

我解析此为Owner实例和NSMutableSet组成的Book实例.

当我第一次尝试保存时,它保存得很好,合并的数据显示在表视图中.

但是,在第二次保存时,当XML内容包含新书时,它不起作用.

这是发生的事情:

然后,我尝试加载一个XML文档,该文档包含一个Book尚未在主要托管对象上下文中的新文档.新Book的使用Owner与其他Books 相关的相同.

我有例程挑选出这种独特的Owner管理对象(我已经在我的主要管理对象上下文)和独特的Book没有在主MOC找到.

由此,我Book在辅助MOC中创建了一个新对象,并将其" owner"关系设置为指向Owner我在主要MOC中找到的唯一关系.

当我保存时,我收到以下错误:

*** Terminating app due to uncaught 
exception 'NSInvalidArgumentException', …
Run Code Online (Sandbox Code Playgroud)

iphone core-data nsfetchedresultscontroller

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

如何查看核心数据库中存储的内容?

我正在制作一个依赖Core Data的应用程序.我能够将数据输入文本字段并存储它.

但我需要知道数据是否存储.

我正在尝试向我的tableView创建一个detailView,但我没有得到任何结果.现在我想知道的是因为我的代码做错了,或者数据是否正确存储.

如何查看应用程序CoreData数据库中存储的内容?

core-data ios

44
推荐指数
11
解决办法
5万
查看次数

如何为Core Data中的某些字段添加唯一约束

我使用Xcode进行iOS开发.我有一些实体(例如,User),我需要为他的名字设置唯一约束,但我找不到如何通过可视化编辑器来实现它.是否可以通过GUI完成?或者只能通过代码?我很乐意得到一些截图.

core-data ios

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

不区分大小写的NSPredicate在CoreData中具有单个结果

这是我目前的NSPredicate:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UPC==%@ OR ItemID==%@", aUPCCode,aUPCCode];
Run Code Online (Sandbox Code Playgroud)

如何使这个案例不敏感?

而且我不想做任何部分匹配.

例如,如果他们为aUPCCode输入123我不想得到123,123a,123b,123c等.我只想要完全匹配.

我想过这样做但看起来有点荒谬:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UPC==%@ OR ItemID==%@ OR UPC==%@ OR ItemID==%@ OR UPC==%@ OR ItemID==%@", aUPCCode,aUPCCode,[ aUPCCode lowercaseString] ,[aUPCCode lowercaseString], [aUPCCode uppercaseString],[aUPCCode uppercaseString]];
Run Code Online (Sandbox Code Playgroud)

core-data nspredicate ios

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

CoreData关系错误?

我有一个与单位有"多对多"关系的订单.当我尝试按顺序记录单位(NSSet)时,出现错误错误:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Order" 
                                          inManagedObjectContext:mainContext];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [mainContext executeFetchRequest:fetchRequest 
                                                     error:nil];
for (Order *order in fetchedObjects) {

    NSLog(@"%@", [order units]);
    break;
}        
[fetchRequest release];
Run Code Online (Sandbox Code Playgroud)

结果是:

Relationship 'units' fault on managed object (0x6d9dd00) <Order: 0x6d9dd00> (entity: Order; id: 0x6d88e40 <x-coredata://97A3F3D5-ABA7-499A-A460-5E25CF49C528/Order/p1> ; data: {
    composition = Hemlock;
    condition = "";
    consignee = "";
    consigneeCompanyName = "";
    contactAlternatePhone = "";
    contactEmail = "";
    contactFirstName = "";
    contactLastName = "";
    contactPhone = "";
    customer …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch core-data objective-c ios

43
推荐指数
3
解决办法
3万
查看次数

在NSPredicate中结合'AND'和'OR'条件

回来再次需要更多帮助构建我的NSPredicates :(

Category
{
   name:string
   subs<-->>SubCategory
}

SubCategory
{
   name:string
   numbervalue:NSNumber
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何使用ANDOR创建谓词.

例如,我想返回名称为=="category_name"的每个类别,该类别还具有数值为"valueA" "valueB" 的子类别.

我已经尝试了所有可能的谓词构造函数组合,但是我无法让它工作.

到目前为止,这是我最好的尝试.

NSPredicate *predicate=[NSPredicate predicateWithFormat@"(name== %@) AND (ANY subs.numbervalue==%@ OR ANY subs.numbervalue==%@)", @"aname", value1, value2];
Run Code Online (Sandbox Code Playgroud)

编辑1

第二次尝试.对'numbervalue'的过滤仍然无效.

NSNumber valueA=[NSNumber numberWithInt:20];
NSNumber valueA=[NSNumber numberWithInt:90];
NSArray *arr=[NSArray arrayWithObject:valueA,valueB,nil];

predicate=[NSPredicate predicateWithFormat:@"(name==%@)AND(ANY subs.numbervalue IN %@)",@"aname",arr];
Run Code Online (Sandbox Code Playgroud)

编辑2

我尝试过使用numberValue进行过滤,并将名称全部删除.

1)使用此结果即使集合中只有1个项具有该值,也会返回整个集合.

predicate=[NSPredicate predicateWithFormat:@"(ANY subs.numbervalue IN %@)",arr];
Run Code Online (Sandbox Code Playgroud)

2)使用这会导致同样的问题,即使只有其中一个匹配,也会返回集合中的每个项目.

predicate=[NSPredicate predicateWithFormat:@"((SUBQUERY(subs, $x, $x.numbervalue == %@ or $x.numbervalue == %@).@count > 0)", value1, value2];
Run Code Online (Sandbox Code Playgroud)

同样使用最简单的版本会导致同样的问题......我之前没有注意到这一点.

NSPredicate *predicate=[NSPredicate predicateWithFormat@"(ANY subs.numbervalue==%@ …
Run Code Online (Sandbox Code Playgroud)

core-data nspredicate ios

43
推荐指数
3
解决办法
4万
查看次数

如何在Core Data中使用swift 4 Codable?

Codable似乎是一个非常令人兴奋的功能.但我想知道我们如何在核心数据中使用它?特别是,是否可以直接从/向NSManagedObject编码/解码JSON?

我尝试了一个非常简单的例子:

在此输入图像描述

并定义Foo自己:

import CoreData

@objc(Foo)
public class Foo: NSManagedObject, Codable {}
Run Code Online (Sandbox Code Playgroud)

但是当它像这样使用时:

let json = """
{
    "name": "foo",
    "bars": [{
        "name": "bar1",
    }], [{
        "name": "bar2"
    }]
}
""".data(using: .utf8)!
let decoder = JSONDecoder()
let foo = try! decoder.decode(Foo.self, from: json)
print(foo)
Run Code Online (Sandbox Code Playgroud)

编译器因此错误而失败:

super.init isn't called on all paths before returning from initializer
Run Code Online (Sandbox Code Playgroud)

目标文件是定义的文件 Foo

我想我可能做错了,因为我甚至没有通过NSManagedObjectContext,但我不知道在哪里坚持下去.

核心数据是否支持Codable

core-data swift swift4 xcode9 codable

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

核心数据,NSPredicate和to-many密钥

我有一个Core Data模型,其中Task实体包含一个可选的to-many关系excludedOccurrences.excludedOccurrences的一个属性是start,它是一个NSDate对象.ExcludedOccurrence实体与Task实体具有反向强制一对一关系.

为了获取指定日期的任务,我需要确保指定的日期不会显示为任何ExcludedOccurrence实体的start属性.因此,我试图使用的一个子谓词

NSPredicate *occurrenceIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"(ALL excludedOccurrences.start != %@))", today];
Run Code Online (Sandbox Code Playgroud)

今天是今天的NSDate对象,仅包括日,月和年组件.所有排除的事件启动属性也仅包括日,月和年组件.

虽然这应该没问题,至少阅读Core Data和NSPredicate的文档,但是我收到以下错误消息:

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'不支持的谓词

如果我使用等效谓词

NSPredicate *occurrenceIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"!(ANY excludedOccurrences.start == %@))", today];
Run Code Online (Sandbox Code Playgroud)

没有抛出任何异常,但代码不能按预期工作:而是排除了今天不应排除的事件.

我不确定如何测试caseOccurrences == nil:以下谓词

NSPredicate *nilPredicate = [NSPredicate predicateWithFormat: @"(excludedOccurrences == nil)"];
Run Code Online (Sandbox Code Playgroud)

在运行时导致异常

这里不允许使用多个密钥

但是,由于excludedOccurrences关系是可选的,我还需要测试它是否为零.

我该如何处理?先感谢您.

iphone core-data nspredicate

42
推荐指数
3
解决办法
3万
查看次数

如何将视图数据存储在Core Data中?

我正在为我的应用程序创建一个Core Data模型.我希望能够在里面查看我在那里存储的内容.

有没有比搜索后备存储更简单的方法(我的应该是SQLite)并从那里读取它?看起来不像苹果风格.

iphone core-data

42
推荐指数
7
解决办法
5万
查看次数

使用CoreData生成器在DerivedData文件夹中复制文件

我正在尝试从我的datamodel生成NSManagedModel.生成有效但在我遇到很多错误之后:

错误:文件名"Station + CoreDataProperties.swift"使用了两次:'/ Users/Me/MyApp/Model/CoreData/LCD + CoreDataProperties.swift'和'/ Users/Me/Library/Developer/Xcode/DerivedData/MyApp-gwacspwrsnabomertjnqfbuhjvwc/Build/Intermediates/MyApp.build/Debug-iphoneos/MyApp.build/DerivedSources/CoreDataGenerated/Model/Station + CoreDataProperties.swift':0:注意:文件名用于区分具有相同名称的私有声明

我尝试清理build文件夹和derivedData目录硬删除.我正在使用Xcode 8 BETA也许这是一个错误?

core-data swift3 xcode8

42
推荐指数
4
解决办法
7810
查看次数