c - 从 CSIdentity 转换为与 C 兼容的字符串
问题描述
介绍
我有一个objective-C文件(.m),我试图在其中查询本地用户(通过CSGetLocalIdentityAuthority
然后通过printf
(有意使用C)打印每个用户)。
我期待什么?
用目标 c 获取本地用户,用 C pritnf 打印它们。
这是我的尝试:
主文件
int main(){
// Query Local Identity Authority
CSIdentityAuthorityRef defaultAuthority = CSGetLocalIdentityAuthority();
CSIdentityClass identityClass = kCSIdentityClassUser;
CSIdentityQueryRef query = CSIdentityQueryCreate(NULL, identityClass, defaultAuthority);
CFErrorRef error = NULL;
CSIdentityQueryExecute(query, 0, &error);
// get query results
CFArrayRef users_queried = CSIdentityQueryCopyResults(query);
//iterate over users
// Create a users array
NSMutableArray * users_list = [NSMutableArray array];
// // number of users
int users_queried_count = CFArrayGetCount(users_queried);
// // iterate users and save to users array
for (int i = 0; i < users_queried_count; ++i) {
CSIdentityRef identity = (CSIdentityRef)CFArrayGetValueAtIndex(users_queried, i);
CBIdentity * identityObject = [CBIdentity identityWithCSIdentity:identity];
[users_list addObject:identityObject];
}
for (NSString *user in users_list) {
// NSLog(@"%@", user);
const char *c_user = [user UTF8String];
printf("%s", c_user);
}
// release
CFRelease(users_queried);
CFRelease(query);
return 0;
}
但是,这会产生以下错误:
*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[CBUserIdentity UTF8String]:无法识别的选择器发送到实例 0x7fac024161f0”
您可以看到我正在尝试将 转换NSString
为UTF8
String 并打印它,但它失败了(但是,NSLogging
它可以工作)。
解决方案
CBIdentity
不是NSString
- 它是一个CBIdentity
!
如果您使用它打印它NSLog
会转换为字符串(通过description
),但是如果您在发送消息时使用它,UTF8String
则它不起作用。
你已经注释掉了NSLog(@"%@", user);
如果这实际上给了您想要的东西,那么将添加部分更改为
[users_list addObject:[identityObject description]];
否则,请注意您正在循环CBIdentity
,而不是NSString
像这样或类似的那样更改循环。
for ( CBIdentity * user in users_list ) {
const char *c_user = [[user posixName] UTF8String];
printf("%s", c_user);
}
推荐阅读
- html - 超过父宽度的全宽元素 - 但具有最大宽度
- ios - 如何将@IBInspectable 与条形按钮项目一起使用?
- google-analytics - 在 Google Analytics(分析)中制作视图(不包括数据)的精确副本?
- java - 我需要使用中心坐标、高(X 轴)和宽度(y 轴)创建矩形的类
- html - 我可以在我的 amp 页面中使用 recaptcha 组件吗?
- r - 根据 R 将日期列从 csv 转换为日期时出现问题
- list - 如何使用单个命令将所有输入存储在列表中?
- database - Pentaho 中的作业/转换调度
- android - 如何在基于角度的科尔多瓦应用程序中正确处理 X-CSRF-TOKEN?
- flutter - 当仅前景发生变化时,颤振保持背景画布绘图以跳过重绘