首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将NSXPCConnection作为NSMutableDictionary的键添加

将NSXPCConnection作为NSMutableDictionary的键添加
EN

Stack Overflow用户
提问于 2022-02-09 01:36:15
回答 1查看 59关注 0票数 0

编辑:

我通过添加从NSXPCConnection类公开的进程标识符来解决这个问题,因为每个连接作为键都是唯一的。

问题:

我面临一个问题,需要将键值对存储在NSMutableDictionary中(其中NSXPCConnection类型的对象作为密钥存储)。但我无法做到这一点,因为NSXPCConnection不符合NSCopying。

这是我的密码:

代码语言:javascript
复制
- (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];
}

但这会引发以下警告:

代码语言:javascript
复制
Incompatible pointer types initializing 'NSObject<NSCopying> *' with an expression of type 'NSXPCConnection *'

运行时出现以下错误:

代码语言:javascript
复制
-[NSXPCConnection copyWithZone:]: unrecognized selector sent to instance 0x127a4b0d0

任何关于我如何能做得更好的建议都是欢迎的!

EN

回答 1

Stack Overflow用户

发布于 2022-02-09 18:52:42

虽然您已经通过使用不同的键类型来解决特定用例的问题,但另一种选择是使用NSMapTable,它的行为非常类似于NSDictionary,但允许您对键和值具有不同的语义。

具体来说,对于这个用例,+strongToStrongObjectsMapTable是合适的,因为它保留了键,而不是复制它们,从而允许您通过非NSCopying对象(如NSXPCConnection )来键。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71042996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档