我有一个类直接映射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.
我该怎么解决这个问题?
我已经阅读了使用swift 3和Xcode 8 beta对NSManagedObject进行Subclassing,并阅读了这篇精彩的教程.在某些方面仍有疑问.
category/extension它将在新的构建(在派生数据中)得到更新,并且在manual/none它的情况下将保持类文件完整并更新文件导航中的扩展名,即我不会最终得到重复文件.这全部由Xcode处理,因为它们标有预处理器@NSManaged@NSManaged public var name: String?直接转储到现有NSManagedObject子类中.我试过 entity.name = "John"但是我得到了以下错误: reason: '-[SomeEntity setName:]: unrecognized selector sent to instance 0x60400009b120'.我认为这是合理的.我认为不使用核心数据模型编辑器就不会创建setter/getter访问器方法.Category/Extension你只需要自己创建类,并添加您需要任何额外的功能/性能.因为Category/Extension属性是在派生数据中创建的,这就足够了.因为你永远不需要看到那个文件.它的存在足以使事情发挥作用.
特别是在更改 NSManaged属性的上下文中:
更改属性类型,例如NSDate以Date只允许为Manual/None.这里的例子
String?以String只允许为Manual/None.这里的例子仅允许更改属性访问级别,例如从更改public到.这里的例子privateManual/None
如果我选择了Manual/Nonecodegen但是没有选择'create …
我有一个用于NSPersistentCloudKitContainer与 iCloud 同步数据的应用程序。用户报告偶尔数据丢失,之后我开始调试我的实现。
我的应用程序实现的一部分是显示一个弹出窗口,其中显示信息并有一个确认按钮。当用户单击此按钮时,自定义NSManagedObject子类的一个或多个实例将被修改。
同时,NSPersistentCloudKitContainer在应用程序退出并激活时触发镜像过程。当用户单击上述确认按钮时会发生这种情况。它通过执行NSCloudKitMirroringExportRequest和NSCloudKitMirroringImportRequest请求来做到这一点。
换句话说,在我的应用程序中,数据同时被修改(通过代码显式)和镜像(通过 CloudKit 隐式),这就是出错的地方。
本质上是这样的:
NSTimeInterval实例的属性 ( )NSManagedObject增加(例如 0 + 1 = 1)。NSPersistentCloudKitContainer 当应用程序激活或退出时隐式开始镜像数据。在这个阶段,我希望属性的值与最新的(本地)更改相匹配(因此在我的示例 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
我不理解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
我试图复制核心数据中现有的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) 似乎一个NSEntityDescription对象描述数据,一个NSManagedObject对象包含相应的数据.如果您有一个普通的NSObject子类,那么数据的描述和实际数据都在同一个地方,不是它们.好吧,至少描述在类中,数据在对象中.您可以将对象视为具有其包含的变量类型的描述.
那么为什么Core Data将描述数据的类和包含数据的类分开呢?它与断层有关吗?
我有一个令人讨厌的错误,我很感激任何指导我指向解决方案的大方向.偶尔,我得到以下异常,它涉及在我的核心数据模型中的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) 我想知道在多对多关系中获取相关实体数量的最佳方法是什么.假设我的数据模型看起来像这样(简化),我想知道每辆公交车的乘客数量:
目前我可以想到两个选择:
向名为passengerCount的总线实体添加额外属性,每次添加/删除乘客时都会更新该属性.
每次需要显示乘客数量时,都是通过取得乘客并显示他们的计数来完成的.
我的两个选项看起来效率都很低,即使我不知道用核心数据更新/获取值有多重.例如,假设为每个表视图单元格执行数字2.
我的问题是:最好的方法是什么?NSManagedObject类中的方法可能(我找不到)或其他更有效的方法?
所以我一直在构建一个在自定义API上工作很多的应用程序,我已经在API中返回的模型之后在我的应用程序中构建了所有核心数据模型,其中一些功能会根据用户交互而定期更改,我一直在努力找到一种方法来使用ReactiveCocoa和Core数据来有效地将实体中的变化流传输到表格单元格中的视图,因此第四.我已经定期从JSON映射并更新所有模型,我唯一无法解决的是将反应可可与核心数据一起使用的最佳方法.
希望有人可以帮助我
我只是简单地用Core Data创建了一个演示项目.
我Userinfo在我的数据模型中创建了一个实体.现在我创建了NSManagedObject这个实体的子类.
Xcode自动生成了这4个类.
现在,当我构建项目时,它会抛出此错误:
我已经做了我所知道的一切,以消除重复的错误,但没有任何帮助.
我认为这是一个Xcode错误.请帮忙.
nsmanagedobject ×10
core-data ×8
swift ×6
ios ×5
iphone ×2
arrays ×1
cloudkit ×1
cocoa ×1
copy ×1
initializer ×1
macos ×1
nspersistentcloudkitcontainer ×1
objective-c ×1
xcode ×1