编辑:
我通过添加从NSXPCConnection类公开的进程标识符来解决这个问题,因为每个连接作为键都是唯一的。
问题:
我面临一个问题,需要将键值对存储在NSMutableDictionary中(其中NSXPCConnection类型的对象作为密钥存储)。但我无法做到这一点,因为NSXPCConnection不符合NSCopying。
这是我的密码:
- (void)addDataToDict:(MyClass *)obj Connection:(NSXPCConnection *)connection
{
assert(obj);
LogInfo("Assert success");
if([_dict objectForKey:connection])
{
LogError("Connection already in dictionary, abort");
return;
}
else
LogInfo("Adding connection to dict");
NSObject<NSCopying> *key = connection;
[_dict setObject:obj forKey:key];
}但这会引发以下警告:
Incompatible pointer types initializing 'NSObject<NSCopying> *' with an expression of type 'NSXPCConnection *'运行时出现以下错误:
-[NSXPCConnection copyWithZone:]: unrecognized selector sent to instance 0x127a4b0d0任何关于我如何能做得更好的建议都是欢迎的!
发布于 2022-02-09 18:52:42
虽然您已经通过使用不同的键类型来解决特定用例的问题,但另一种选择是使用NSMapTable,它的行为非常类似于NSDictionary,但允许您对键和值具有不同的语义。
具体来说,对于这个用例,+strongToStrongObjectsMapTable是合适的,因为它保留了键,而不是复制它们,从而允许您通过非NSCopying对象(如NSXPCConnection )来键。
https://stackoverflow.com/questions/71042996
复制相似问题