我有一个托管对象("A"),它包含各种属性和关系类型,它的关系也有自己的属性和关系.我想做的是"复制"或"复制"以对象"A"为根的整个对象图,从而创建一个与"A"非常相似的新对象"B".
更具体地说,"B"(或其子代)所包含的关系都不应指向与"A"相关的对象.应该有一个完全相同的关系完整的新对象图,所有对象具有相同的属性,但当然不同的id.
有一种明显的手动方式可以做到这一点,但我希望了解一种更简单的方法,这在核心数据文档中并不完全明显.
TIA!
我有一个用户界面来插入一个Transaction.一旦用户点击加号,他就会获得屏幕,我想要实例化我的核心数据NSManagedObject实体,让用户使用它.然后当用户点击"保存"按钮时,我将调用保存功能.
所以到代码:
transaction = (Transaction *)[NSEntityDescription insertNewObjectForEntityForName:@"Transaction" inManagedObjectContext:self.managedObjectContext];
//even if i dont call save: its going to show up on my table
[self.managedObjectContext save:&error]
Run Code Online (Sandbox Code Playgroud)
PS我在该表上使用NSFetchedResultsController,我看到NSFetchedResultsController正在向表中插入一个节和一个对象.
我的想法是,如果有一种方法来实例化事务NSManagedObject我可以更新它而不保存直到客户选择.
关于如何删除swift中的所有核心数据,我有点困惑.我创建了一个带IBAction链接的按钮.点击按钮我有以下内容:
let appDel: foodforteethAppDelegate = UIApplication.sharedApplication().delegate as foodforteethAppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext
Run Code Online (Sandbox Code Playgroud)
然后我用各种方法搞砸了尝试删除所有核心数据内容,但我似乎无法让它工作.我已经使用removeAll从存储的数组中删除但仍然无法从核心数据中删除.我假设我需要某种类型的for循环但不确定如何从请求中创建它.
我尝试应用删除单行的基本原则
func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) {
let appDel: foodforteethAppDelegate = UIApplication.sharedApplication().delegate as foodforteethAppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext
if editingStyle == UITableViewCellEditingStyle.Delete {
if let tv = tblTasks {
context.deleteObject(myList[indexPath!.row] as NSManagedObject)
myList.removeAtIndex(indexPath!.row)
tv.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: UITableViewRowAnimation.Fade)
}
var error: NSError? = nil
if !context.save(&error) {
abort()
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这个问题是当我单击一个按钮时,我没有indexPath值,而且我还需要遍历所有我无法用上下文做的值.
我想知道对象是否在Core Data中持久存在.例如,我在Core Data中有Friends,我通过firstName识别它们.我可以查询核心数据以查看"George"是否已知.如果结果集数组包含多个零对象,我知道George就在那里.但是核心数据将整个内容加载到内存中,我实际上只是想知道乔治是否存储.
我怎样才能以最有效的方式做到这一点?
我将我的一个核心数据属性设置为布尔值.现在,我需要设置它,但XCode一直告诉我它可能不响应setUseGPS.
[ride setUseGPS: useGPS.on];
Run Code Online (Sandbox Code Playgroud)
在核心数据中设置布尔值的方法是什么?我所有其他属性都以这种方式设置,并且它们运行良好.那么,不确定为什么布尔值无法以这种方式设置?
我有一个相当标准的设置,一个从未保存的暂存器MOC(包含从Web下载的一堆对象)和另一个永久MOC持久化对象.当用户从scratchMOC中选择一个对象添加到她的库时,我想要1)从scratchMOC中删除对象并插入到permanentMOC中,或者2)将对象复制到permanentMOC中.该核心数据FAQ说,我可以复制的对象是这样的:
NSManagedObjectID *objectID = [managedObject objectID];
NSManagedObject *copy = [context2 objectWithID:objectID];
Run Code Online (Sandbox Code Playgroud)
(In this case, context2 would be permanentMOC.) However, when I do this, the copied object is faulted; the data is initially unresolved. When it does get resolved, later, all of the values are nil; none of the data (attributes or relationships) from the original managedObject are actually copied or referenced. Therefore I can't see any difference between using this objectWithID: method and just inserting an entirely new …
cocoa cocoa-touch core-data nsmanagedobject nsmanagedobjectcontext
跟我说,这需要一些解释.我有一个看起来像下面的功能.
上下文:"aProject"是名为LPProject的核心数据实体,其名为"memberFiles"的数组包含另一个名为LPFile的Core Data实体的实例.每个LPFile表示磁盘上的文件,我们要做的是打开每个文件并解析其文本,查找指向OTHER文件的@import语句.如果我们找到@import语句,我们希望找到它们指向的文件,然后通过向代表第一个文件的核心数据实体添加关系,将该文件"链接"到该文件.由于所有这些都需要一些时间在大文件上,我们将使用GCD在主线程上完成.
- (void) establishImportLinksForFilesInProject:(LPProject *)aProject {
dispatch_queue_t taskQ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
for (LPFile *fileToCheck in aProject.memberFiles) {
if (//Some condition is met) {
dispatch_async(taskQ, ^{
// Here, we do the scanning for @import statements.
// When we find a valid one, we put the whole path to the imported file into an array called 'verifiedImports'.
// go back to the main thread and update the model (Core Data is not thread-safe.)
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"Got to main thread.");
for …Run Code Online (Sandbox Code Playgroud) cocoa core-data objective-c grand-central-dispatch objective-c-blocks
我在Xcode中保存到Core数据对象时遇到错误.
Xcode说错误是在NSDate变量'datum'中,但我几乎尝试了所有内容.错误是:
2011-07-12 18:01:29.068 WeekLijstje[3205:207] Core Data Save Error
NSValidationErrorKey datum
NSValidationErrorPredicate (null)
NSValidationErrorObject
<DagLijst: 0x6e2fcd0> (entity: DagLijst; id: 0x6e2fd30 <x-coredata:///DagLijst/t99F423FC-AAE9-4692-9264-EF0FF7A020572> ; data: {
Voedsel = nil;
datum = nil;
hoeveelheid = 0;
punten = 0;
})
NSLocalizedDescription:The operation couldn’t be completed. (Cocoa error 1570.)
Run Code Online (Sandbox Code Playgroud)
一个小代码snipet:
DagLijst *newDaglijst = [NSEntityDescription insertNewObjectForEntityForName:@"DagLijst" inManagedObjectContext:self.managedObjectContext];
NSDate *selDatum = [NSDate date];
newDaglijst.punten = [NSNumber numberWithInteger:10];
newDaglijst.hoeveelheid = [NSNumber numberWithInt:100];
newDaglijst.Voedsel = geselecteerdVoedsel;
newDaglijst.datum = selDatum;
NSError *error = nil;
if (![newDaglijst.managedObjectContext save:&error]) {
... …Run Code Online (Sandbox Code Playgroud) 我创建了一个非核心数据项目.我现在想要使用核心数据.在构建阶段,我将我的二进制文件与CoreData.framework链接起来.在我的应用程序委托方法中,我想手动创建一个托管对象上下文
NSManagedObjectContext *aContext = [[NSManagedObjectContext alloc] init];
Run Code Online (Sandbox Code Playgroud)
当我执行上述操作时,出现以下错误:
Receiver 'NSManagedObjectContext' for class message is a forward declaration.
Run Code Online (Sandbox Code Playgroud)
关于我可能做错什么的任何建议?