- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,所以如果需要的话就把它否决,但是我已经准备好要通过一些事情了,因为这使我发疯。我有一个core data
应用程序(OS X),通过NSTableViews
连接了几个NSArrayControllers
(基于单元)。我有一些自定义方法的Entity类设置。我可以添加,删除,编辑数据并进行各种处理-一切都很好。
我决定为运行总和添加新列,并使用@sum
,如我所见。无论我做什么,我都会不断收到错误消息。
我有一个实体“ Store”和另一个实体“ Item”,它们有一对多的关系。在项目实体中,我具有名称和价格属性。
在主窗口中,我有两个NSTableView
的NSArrayController
控制器,一个用于存储,一个用于物料。项目NSArrayController
的内容由存储控制器-所选项目控制。
我在Item NSTableView
中添加了新列,将其绑定到Item Controller,并将其模型键路径设置为@ sum.price-这会导致错误。
我可能缺少一些简单的东西,对如何正确执行此操作有任何想法吗?
谢谢。
- [编辑] - -
商店NSArrayController
:
-对象控制器
-实体名称:商店
ManagedObjectContext
绑定到主控制器的ManagedObjectContext
项目NSArrayController
:
对象控制器
实体名称:项目
内容集:
绑定到存储阵列控制器
控制器键:选择
型号关键路径:项目
项目NSTableView
:
第一栏:
绑定到项目数组控制器
控制器键:rangedObjects
型号密钥路径:名称
第二栏:
相似,型号关键路径:价格
新的总和列:
绑定到项目数组控制器
控制器键:rangedObjects
模型密钥路径:@ sum.price
我收到的错误是:“实体Item不符合键“ @sum”的编码标准。
最佳答案
考虑您的第一列。它绑定到项目控制器arrangedObjects
,name
。每个单元格都有一个名称数组吗?不。每个人都有一个名字。
尽管有时将列绑定表示为像Item Controller.arrangedObjects.name
这样的键路径,但实际上它的工作方式是该列整体上显示arrangedObjects
,每行一个元素,但是name
应用于该行的每个元素单独设置。因此,每个单元格都有一个名称。
现在考虑您的新专栏。这些行再次对应于Item Controller的arrangedObjects
,但是模型键路径分别应用于每个元素。但是模型键路径包含集合运算符@sum
,它不适用于单个元素(Item
实体)。因此,错误。
您可以创建一个文本字段(在表格外部),该文本字段显示所选商店的所有商品的价格总和。您可以将文本字段的“值”绑定绑定到项目控制器arrangedObjects
,@sum.price
。文本字段与表格列的工作方式不同,因为它仅显示单个内容。它确实确实使用了[ItemController valueForKeyPath:@"arrangedObject.@sum.price"]
的结果。集合运算符将应用于集合。
您还可以将文本字段绑定到项目控制器selection
,@sum.price
,以使其显示项目表中所选项目的价格总和。
如果我理解您的意思,绑定不会提供任何方式来获得连续的总和(第一行显示第一项目的价格,第二行显示第一项目和第二项目的价格之和,等等) 。这样的总和将取决于上下文。给定行的值将取决于先前行的值。例如,对表进行不同的排序将意味着给定项目旁边的运行总和将发生变化,因为之前的一组项目已发生变化。绑定无法做到这一点。他们不知道位置,索引或同级。
更新:
要获得连续的总和,您无需为该列使用绑定。如果您的视图或窗口控制器尚未采用NSTableViewDataSource
,请使其采用。然后将表视图的dataSource
出口连接到它。
在您的数据源类中,实现-tableView:objectValueForTableColumn:row:
。检查列identifier
。对于除运行总和列以外的任何列,请返回nil
,以便它使用列绑定中的值。
对于运行总和列,简单但效率低下的实现将类似于:
NSRange range = NSMakeRange(0, rowIndex + 1);
NSArray* rowsToSum = [self.itemController.arrangedObjects subarrayWithRange:range];
return [rowsToSum valueForKeyPath:@"@sum.price"];
self
键路径
@"itemController.arrangedObjects.price"
中的变化。您可以在
-viewDidLoad
或
-windowDidLoad
中进行设置。控制器完成后,请不要忘记将其拆除。
-observeValueForKeyPath:ofObject:change:context:
-您将在表视图上调用
-reloadDataForRowIndexes:columnIndexes:
以指示应重新加载运行总和列中的所有行索引。
_cacheIsValid
。像所有实例变量一样,默认情况下它将以零(false)开头。在
-tableView:objectValueForTableColumn:row:
中,您将检查其是否有效。如果不是,则将其构建并记录其有效。然后,或者如果它已经有效,则只需返回所请求行的元素。
self.itemController.arrangedObjects
并计算运行总和,并将每个值添加到数组的末尾。您可以根据需要使用基本样式类型的C样式数组或
NSMutableArray
的
NSNumber
。 (可以通过将
NSMutableData
用于缓冲区来简化C样式数组的内存管理。)
-observeValueForKeyPath:...
中的缓存无效。
NSMutableIndexSet
中仅累积那些实际运行的总和发生更改的行的行索引,并在对
-reloadDataForRowIndexes:columnIndexes:
的调用中使用该行索引。这样,表视图仅重新加载实际更改的单元格。
关于objective-c - 类别对键@sum的键值编码不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28622617/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!