我有一个为 OS-X 编译 32 位的 XPC 服务。它的一种方法将单个参数作为参数,并在主进程上调用给定的块。
这个块需要 3 个 NSStrings 和一个应该只包含 NSValues 的 NSArray。每个 NSValue 对象都持有一个 NSRect。
由于某种原因,当 NSArray 不为零时,不会调用给定的块。如果不是保存 NSValues,而是让数组保存 NSStrings,则该块被正确调用。
我不确定如何解决这个问题,因为没有明显的原因会发生这种情况。根据苹果文档,NSValue 确实符合 NSSecureCoding。
我什至尝试使用以下方法将 NSValue 类列入白名单(这实际上并不需要):
NSSet *readerSelectionClasses =
[NSSet setWithObjects:[NSArray class], [NSValue class], nil];
[newConnection.exportedInterface setClasses:readerSelectionClasses forSelector:@selector(MyMethod:WithReply:) argumentIndex:3 ofReply:YES];
这似乎没有任何改变。
知道如何通过 NSArray 吗?我想我可以将所有 NSRects 格式化为 NSStrings,并传递一个我知道可行的 NSStrings 数组,但这会导致我宁愿避免的性能下降。