小编CJ.*_*CJ.的帖子

如何正确级联删除Core Data中的托管对象?

我有一个核心数据模型,它有三个实体:A,B和C.A与B有一对多的关系,B与C有多对多的关系.A的删除规则 - > B是"Cascade",B - > A是"No Action".B - > C的删除规则是"No Action",C - > B是"Deny".

我在A实体上执行删除时遇到问题.我想要发生的是以下内容:

  1. 我删除了一个A的实例(使用deleteObject:)
  2. 删除传播到与A关联的任何B(由于"级联"删除规则)
  3. 与A关联的所有B都将被删除
  4. 属于C的任何关系,其关联的B被删除,也被删除

这可能有点令人困惑,所以让我解释一下:当删除A时,删除所有关联的B.任何引用那些B的C都不能再引用它们了.

在我的测试中,我没有看到"Cascade"删除规则对我起作用.当我删除A时,我会processPendingChanges立即调用(只是为了确保删除已完成).然后我比较删除之前和之后NSManagedObjectContext中A和B的数量.A的实例已被正确删除,(总A的数量现在比删除前少一个).但是,B的数量保持不变.因此,似乎没有尊重"级联"删除规则.

我知道我可以手动完成A - > B关系,并手动删除每个B.然而,看起来这是Core Data免费提供的东西,所以除非Core Data不足,否则我不想这样做.有关使用"级联"删除规则的任何信息都是受欢迎的.

cocoa cascade core-data data-modeling

15
推荐指数
1
解决办法
1万
查看次数

将自定义方法添加到子类NSManagedObject

我有一个核心数据模型,我有一个实体A,这是一个抽象.实体B,C和D继承自实体A.实体A中定义了几个由B,C和D使用的属性.

我想在我的模型代码中利用这种继承.除了属性之外,我想知道我是否可以向实体A添加方法,这些方法在它的子实体中实现.

例如:

  1. 我为实体A的接口添加了一个方法,它返回一个值并接受一个参数
  2. 我将此方法的实现添加到A,B,C,D
  3. 然后,我调用executeFetchRequest:检索B的所有实例
  4. 我在检索到的对象上调用该方法,该方法应该调用B实现中包含的方法的实现

我试过这个,但在调用方法时,我收到:

[NSManagedObject methodName:]:发送到实例的无法识别的选择器

我认为这是因为返回的executeFetchRequest:对象是某种代理对象.

有没有办法利用子类NSManagedObjects来利用继承?

我真的希望能够做到这一点,否则我的模型代码将负责确定它正在处理什么类型的NSManagedObject并根据类型执行特殊逻辑,这是不可取的.

任何帮助表示赞赏,提前谢谢.

inheritance cocoa core-data subclass

14
推荐指数
2
解决办法
8459
查看次数

算法实现套索选择工具?

我正在开发一个Mac OS X应用程序,作为它的UI的一部分,它将在其主视图中显示许多可以选择的视觉元素.这些元素可以放置在视图中的任何位置.UI将支持各种选择元素的方式:矩形选框选择,椭圆选框选择和"自由"套索选择.

我已经有矩形和椭圆选框工作了.算法非常简单; 如果元素的区域与矩形/椭圆的区域相交,则认为元素被"选中".

套索选择将像Photoshop中的现代图像处理应用程序一样工作; 用户可以单击并拖动将自行关闭的路径,并且将选择所绘制路径中包含的元素.

该算法可能比矩形/椭圆形选择复杂得多,因为选择的形式是不受限制的.我想知道是否有人有写这样的东西的经验,或者你是否可以指出我正确的方向,关于什么样的编程技术是必要的,以及这种算法最有效的方法是什么.

提前致谢.

algorithm cocoa image-manipulation selection edge-detection

8
推荐指数
1
解决办法
4874
查看次数

NSArrayController初始化

我无法让核心数据支持的NSArrayController在我的代码中正常工作.以下是我的代码:

pageArrayController = [[NSArrayController alloc] initWithContent:nil];
    [pageArrayController setManagedObjectContext:[self managedObjectContext]];
    [pageArrayController setEntityName:@"Page"];
    [pageArrayController setAvoidsEmptySelection:YES];
    [pageArrayController setPreservesSelection:YES];
    [pageArrayController setSelectsInsertedObjects:YES];
    [pageArrayController setClearsFilterPredicateOnInsertion:YES];
    [pageArrayController setEditable:YES];
    [pageArrayController setAutomaticallyPreparesContent:YES];
    [pageArrayController setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"index" ascending:YES]]];
    BOOL result = [pageArrayController setSelectionIndex:0];
Run Code Online (Sandbox Code Playgroud)

当我尝试调用setSelectionIndex:时,它返回YES,表示选择已成功更改.但是,对pageArrayController对象的任何后续getSelectionIndex调用都返回NSNotFound.

我不明白的是,如果我将NSArrayController放入NIB,并允许NIB文件执行初始化(在Interface Builder中具有所有相同的属性),NSArrayController正常工作.

为什么行为存在差异?NIB文件是否以特殊方式初始化这些类型的对象?我的NSArrayController初始化是不正确的?

任何帮助表示赞赏.谢谢.

macos cocoa core-data nib nsarraycontroller

7
推荐指数
1
解决办法
4350
查看次数

打印CALayers

我有一个包含许多CALayers的NSView.当用户编辑文档时,这些CALayers会对所有编辑进行动画处理.我正在尝试为我的应用程序实现打印,但是我在正确打印这些CALayers时遇到了一些问题.

一些CALayers边界占据整个NSView,并且不需要布局,因为它们的位置永远不会改变.但是,我还有一个CALayer,其中包含大约20个小型CALayer.这些CALayers在正常编辑期间为其位置更改设置动画.但是,在尝试打印NSView时,这些小型CALayers永远不会正确布局.我想知道是否有一些特殊的事情我必须做,以确保正确定位这些图层,并允许正确绘制/打印NSView.

有没有人有打印Core Animation支持的NSView的经验?任何建议表示赞赏.

printing cocoa core-animation calayer nsview

3
推荐指数
1
解决办法
1551
查看次数