gpt4 book ai didi

ios - 如何将 NSValue 转换为 NSString

转载 作者:行者123 更新时间:2023-12-01 19:02:00 27 4
gpt4 key购买 nike

一些背景... 我正在编写通过 ObjC-JS 桥使用 UIWebView 与 javascript 交互的代码的stringByEvaluatingJavaScriptFromString: .这个想法是应用程序的“大脑”在 JS 中,它告诉 Objective-C 如何表现。这样做有很多好处,例如减少二进制大小、灵活更新等。但是,在某些情况下,JS 需要引用一些仅限 Objective-C 的对象(JS 指示 ObjC 何时使用/删除目的)。这是通过将 native 对象放在具有唯一标识符的字典中来完成的,该标识符可以作为字符串传递给 JS(通过桥接)。我的问题源于为所说的 native Objective-C 对象提出了一个很好的标识符。

因此,我试图将对对象的引用转换为没有运气的字符串。这就是我所拥有的:

// anObject is a custom class
NSValue *handle = [NSValue valueWithPointer:(__bridge const void *)anObject];
NSData *data = [NSData dataWithValue:handle];
NSString *stringHandle = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
dataWithValue:功能( taken from this SO post):
+ (NSData *)dataWithValue:(NSValue *)value {
NSUInteger size;
const char* encoding = [value objCType];
NSGetSizeAndAlignment(encoding, &size, NULL);

void* ptr = malloc(size);
[value getValue:ptr];
NSData* data = [NSData dataWithBytes:ptr length:size];
free(ptr);

return data;
}

在调试器中遍历它会显示 nil stringHandle 的值:

enter image description here

我究竟做错了什么?

最佳答案

您做错了什么是试图将地址视为 UTF-8 编码的字符串。地址 - 或任何其他任意数据 block - 不太可能是有效的 UTF-8 数据。 (如果碰巧是,它仍然不是您期望的字符串。)

如果你想得到一个包含指针值的字符串,即原始对象的地址,那就是 [NSString stringWithFormat:@"%p", anObject];
如果你真的需要从 NSValue , 然后替换 anObject[theValue pointerValue] .

如果您想打印任意数据,请参阅 How to convert an NSData into an NSString Hex string?

关于ios - 如何将 NSValue 转换为 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22163005/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com