标签: nsmanagedobject

如何实现符合Mappable的NSManagedObject类

我有一个类直接映射JSON实现Mappable(ObjectMapper框架)协议,我试图继承NSManagedObject.

class AbstractModel: NSManagedObject, Mappable {

@NSManaged var uuid: String?
@NSManaged var updatedAt: String?
@NSManaged var createdAt: String?

required init?(_ map: Map) {
    mapping(map)
}

func mapping(map: Map) {
    uuid        <- map["uuid"]
    updatedAt   <- map["updatedAt"]
    createdAt   <- map["createdAt"]

}
}
Run Code Online (Sandbox Code Playgroud)

这个实现的问题是编译器抱怨mapping(map)在超级初始化器之前使用self: AbstractModel.swift:19:9: Use of 'self' in method call 'mapping' before super.init initializes self

不幸的是我以前不能调用super initializer(super.init(entity: NSEntityDescription, insertIntoManagedObjectContext: NSManagedObjectContext?))mapping(map)因为我需要self得到它NSManagedObjectContext.

我该怎么解决这个问题?

initializer nsmanagedobject ios swift

6
推荐指数
1
解决办法
976
查看次数

Coredata的CodeGen'手册/无+创建NSManagedObject子类'与'类别/扩展'之间的功能差异是什么?

我已经阅读了使用swift 3和Xcode 8 beta对NSManagedObject进行Subclassing,并阅读了这篇精彩的教程.在某些方面仍有疑问.

相似之处是:

  1. 我可以自定义两个类,但我喜欢.
  2. 我可以添加新属性或删除或重命名属性.即因为category/extension它将在新的构建(在派生数据中)得到更新,并且在manual/none它的情况下将保持类文件完整并更新文件导航中的扩展名,即我不会最终得到重复文件.这全部由Xcode处理,因为它们标有预处理器@NSManaged
  3. 不允许将类似内容@NSManaged public var name: String?直接转储到现有NSManagedObject子类中.我试过 entity.name = "John"但是我得到了以下错误: reason: '-[SomeEntity setName:]: unrecognized selector sent to instance 0x60400009b120'.我认为这是合理的.我认为不使用核心数据模型编辑器就不会创建setter/getter访问器方法.

不同之处是:

  1. 对于Category/Extension你只需要自己创建类,并添加您需要任何额外的功能/性能.
  2. 因为Category/Extension属性是在派生数据中创建的,这就足够了.因为你永远不需要看到那个文件.它的存在足以使事情发挥作用.

    
特别是在更改 NSManaged属性的上下文中:

  3. 更改属性类型,例如NSDateDate只允许为Manual/None.这里的例子

  4. 更改类型的可选性,如String?String只允许为Manual/None.这里的例子
  5. 仅允许更改属性访问级别,例如从更改public到.这里的例子privateManual/None

  6. 如果我选择了Manual/Nonecodegen但是没有选择'create …

xcode core-data nsmanagedobject swift

6
推荐指数
1
解决办法
355
查看次数

NSPersistentCloudKitContainer 将 NSManagedObject 子类恢复为历史值

我有一个用于NSPersistentCloudKitContainer与 iCloud 同步数据的应用程序。用户报告偶尔数据丢失,之后我开始调试我的实现。

我的应用程序实现的一部分是显示一个弹出窗口,其中显示信息并有一个确认按钮。当用户单击此按钮时,自定义NSManagedObject子类的一个或多个实例将被修改。

同时,NSPersistentCloudKitContainer在应用程序退出并激活时触发镜像过程。当用户单击上述确认按钮时会发生这种情况。它通过执行NSCloudKitMirroringExportRequestNSCloudKitMirroringImportRequest请求来做到这一点。

换句话说,在我的应用程序中,数据同时被修改(通过代码显式)和镜像(通过 CloudKit 隐式),这就是出错的地方。

本质上是这样的:

  1. 子类NSTimeInterval实例的属性 ( )NSManagedObject增加(例如 0 + 1 = 1)。
  2. NSPersistentCloudKitContainer 当应用程序激活或退出时隐式开始镜像数据。
  3. 在此过程中但在完成之前,该属性再次增加(例如 1 + 1 = 2)。
  4. 在内部,镜像过程完成。

在这个阶段,我希望属性的值与最新的(本地)更改相匹配(因此在我的示例 2 中)。但相反,它匹配初始增量(因此在我的示例 1 中),覆盖我最新的(本地)更改导致数据丢失。显然,NSCloudKitMirroringImportRequest恢复到镜像进程启动时的状态,这也可以在日志中看到:

CoreData: debug: CoreData+CloudKit: -[PFCloudKitImporterZoneChangedWorkItem applyAccumulatedChanges:error:]
[…]
Importing updated records:
(
    "<CKRecord: 0x10225b560; recordID=5458F9C8-7BE2-4563-92DE-650ED4C643F5:(com.apple.coredata.cloudkit.zone:__defaultOwner__), recordChangeTag=23, values={\n    \"CD_activity\" = \"3E497A4C-6467-48F4-B7F4-6F1B2B7BC779\";\n    \"CD_date\" = \"2020-04-26 07:28:00 +0000\";\n    \"CD_duration\" = \"1\";\n    \"CD_entityName\" = Mutation;\n}, recordType=CD_Mutation>"
)
Run Code Online (Sandbox Code Playgroud)

在这个阶段,我不确定这是否是NSPersistentCloudKitContainer …

macos nsmanagedobject swift cloudkit nspersistentcloudkitcontainer

6
推荐指数
0
解决办法
214
查看次数

核心数据:NSLog输出不显示"字段"

我不理解NSFetchRequest返回的数组的NSLog输出.

我正在读取我的数据库并将内容放在一个数组中,循环遍历数组,然后使用NSLog输出内容.我不太明白日志文件中的输出.代码如下:

-(void)createXMLFeed{
    //Fetch details from the database.
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Tabrss" inManagedObjectContext:managedObjectContext];
    [request setEntity:entity];
    NSError *error;
    self.stories = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
    //[request release];

    // Count the number of items in the array and display in the log.
    int arrayItemQuantity = [stories count];
    NSLog(@"Array Quantity: %d", arrayItemQuantity);

    // Loop through the array and display the contents.
    int i;
    for (i = 0; i < arrayItemQuantity; i++)
        NSLog (@"Element %i = %@", i, …
Run Code Online (Sandbox Code Playgroud)

arrays iphone core-data nsmanagedobject nsmanagedobjectcontext

5
推荐指数
2
解决办法
4189
查看次数

如何在Core Data中制作NSManagedObject的Deep Copy

我试图复制核心数据中现有的NSManagedObject和相关的子对象.我似乎找不到一个简单的方法来做到这一点.

我有一个从Core Data数据库填充的NSArrayController.我想在selectionIndex处获取对象并进行深层复制,使其与同一父对象相关并复制所有子对象.

任何帮助表示赞赏!

感谢TechZen的链接.我使用了该站点的示例代码并使用了此调用代码:

RuleSetVersion *object = [[ruleSetVersionArrayController selectedObjects] lastObject];

NSString *parentEntity = @"RuleSet";

RuleSetVersion *newObject = (RuleSetVersion*)[self copyObject:object toContext:[self managedObjectContext] parent:parentEntity];

[newObject setRuleSetEffectiveDate:[[NSDate alloc] init]];
[newObject setRuleSetVersionLastModifiedDate:[[NSDate alloc] init]];

[newObject setRuleSet:object.ruleSet];

NSError *error;

if ([managedObjectContext save:&error] == NO) {
    [NSApp presentError:error];
}
Run Code Online (Sandbox Code Playgroud)

copy core-data nsarraycontroller nsmanagedobject

5
推荐指数
1
解决办法
7668
查看次数

为什么NSManagedObject和NSEntityDescription是单独的类?

似乎一个NSEntityDescription对象描述数据,一个NSManagedObject对象包含相应的数据.如果您有一个普通的NSObject子类,那么数据的描述和实际数据都在同一个地方,不是它们.好吧,至少描述在类中,数据在对象中.您可以将对象视为具有其包含的变量类型的描述.

那么为什么Core Data将描述数据的类和包含数据的类分开呢?它与断层有关吗?

iphone cocoa core-data nsmanagedobject nsentitydescription

5
推荐指数
1
解决办法
735
查看次数

NSManaged Object initWithCoder错误

我有一个令人讨厌的错误,我很感激任何指导我指向解决方案的大方向.偶尔,我得到以下异常,它涉及在我的核心数据模型中的3个不同的NSManagedObject子类上调用initWithCoder.如果我从我的设备中删除该应用程序并重新加载它,或者在模拟器上重置内容,则异常就会消失.没有在我的代码中我在NSManagedObject子类上显式调用initWithCoder.

在编辑源代码的随机部分后,该错误似乎随机出现.关于从哪里开始的任何想法?

2014-01-11 15:59:22.078 Flip Evaluator and Manager[354:a0b] -[SellingCosts initWithCoder:]: unrecognized selector sent to instance 0xc2cec80
2014-01-11 15:59:22.079 Flip Evaluator and Manager[354:a0b] CoreData: error: exception during fetchRowForObjectID: -[SellingCosts initWithCoder:]: unrecognized selector sent to instance 0xc2cec80 with userInfo of (null)
2014-01-11 15:59:22.081 Flip Evaluator and Manager[354:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SellingCosts initWithCoder:]: unrecognized selector sent to instance 0xc2cec80'
*** First throw call stack:
(
    0   CoreFoundation                      0x01e9a5e4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x01c1d8b6 objc_exception_throw + 44 …
Run Code Online (Sandbox Code Playgroud)

core-data nsmanagedobject ios

5
推荐指数
1
解决办法
1168
查看次数

在数据库中获得关系计数的有效方法

我想知道在多对多关系中获取相关实体数量的最佳方法是什么.假设我的数据模型看起来像这样(简化),我想知道每辆公交车的乘客数量:

数据模型

目前我可以想到两个选择:

  1. 向名为passengerCount的总线实体添加额外属性,每次添加/删除乘客时都会更新该属性.

  2. 每次需要显示乘客数量时,都是通过取得乘客并显示他们的计数来完成的.

我的两个选项看起来效率都很低,即使我不知道用核心数据更新/获取值有多重.例如,假设为每个表视图单元格执行数字2.

我的问题是:最好的方法是什么?NSManagedObject类中的方法可能(我找不到)或其他更有效的方法?

core-data nsmanagedobject ios swift

5
推荐指数
1
解决办法
444
查看次数

ReactiveCocoa与CoreData的最佳实践

所以我一直在构建一个在自定义API上工作很多的应用程序,我已经在API中返回的模型之后在我的应用程序中构建了所有核心数据模型,其中一些功能会根据用户交互而定期更改,我一直在努力找到一种方法来使用ReactiveCocoa和Core数据来有效地将实体中的变化流传输到表格单元格中的视图,因此第四.我已经定期从JSON映射并更新所有模型,我唯一无法解决的是将反应可可与核心数据一起使用的最佳方法.

希望有人可以帮助我

core-data nsmanagedobject ios reactive-cocoa swift

5
推荐指数
0
解决办法
310
查看次数

NSManagedObject子类中的重复符号错误

我只是简单地用Core Data创建了一个演示项目.

Userinfo在我的数据模型中创建了一个实体.现在我创建了NSManagedObject这个实体的子类.

Xcode自动生成了这4个类.

在此输入图像描述

现在,当我构建项目时,它会抛出此错误:

在此输入图像描述

我已经做了我所知道的一切,以消除重复的错误,但没有任何帮助.

我认为这是一个Xcode错误.请帮忙.

core-data objective-c nsmanagedobject ios swift

5
推荐指数
1
解决办法
2293
查看次数