【问题标题】:Objective-C cast from (_bridge const void*) type to (NSString*) [closed]Objective-C 从 (_bridge const void*) 类型转换为 (NSString*) [关闭]
【发布时间】:2013-03-05 15:21:51
【问题描述】:

我正在开发一个 iPhone 应用程序,我从 _bridge const void * 类型的方法中提取了一个值。 但我需要将此值转换为NSString 类型。

我看到经典的演员阵容没有效果。

 valueNSString = (NSString *) valueConstVoid

【问题讨论】:

  • 实际返回的是什么类型?
  • 需要有关原始类型的更多信息。您将使用其中一种桥接演员变体,但 void * 对字节含义的说明太少。 NSData 可能是正确的,但 NSString 或其他任何东西也可能是正确的。
  • 原始类型是我从属性返回的一组信息中提取的数字序列。然而,出于某种原因,这组数字是 _bridge const void * 类型。我从来没有遇到过这种数据,甚至不知道它是什么意思_bridge。问题是我需要将此数据提供给仅接受 NSString 类型的方法,因此我需要将其转换为 NSString。
  • 所以属性是const void *?
  • 你认为任何类型都可以通过强制转换来转换为任何其他类型?

标签: iphone objective-c xcode casting bridge


【解决方案1】:

也许它可以先桥接到 NSData,然后才使用适当的构造函数转换为 NSString。

所以我们这里有一个指向 void 的指针。指向 void 的指针只是物理对象(或字节序列)表示开始的内存位置。我们不知道它是什么,这就是问题所在。强制转换只是对特定类型指针的赋值。换句话说,类型化指针允许您知道特定属性在哪里以及实际物理表示在哪里结束。让我们试试这个。在分配value 之后的行停止调试器并在调试器中键入po value。告诉我们您看到的打印输出。

【讨论】:

  • 怎么样?你能给我一个带代码的例子吗?谢谢!
  • @user2136333 我需要更多信息来了解您如何获得此值。提供后,我将立即给出示例。
  • 原始类型是我从属性返回的一组信息中提取的数字序列。然而,出于某种原因,这组数字是 _bridge const void * 类型。我从来没有遇到过这种数据,甚至不知道它是什么意思_bridge。问题是我需要将此数据提供给仅接受 NSString 类型的方法,因此我需要将其转换为 NSString。
  • @user2136333 信息不足。哪个物业?什么信息集?
  • 我提取的信息是一个 ID 号,它是 facebook 用户的标识符。我需要将此 ID 转换为 NSString。你知道用 API 获取 Facebook 用户 ID 的另一种方法吗?
【解决方案2】:

(__bridge const void*) 不是类型而是类型转换。所以你的值可能是const void * 类型。如果您确定它是指向 NSString 的指针,您可以按如下方式进行转换:

const void *value;
NSString *stringValue = (__bridge NSString *)value;

【讨论】:

  • 那么问题来了,为什么要声明为void *?对我来说似乎很狡猾......
  • 在这种情况下 __bridge 的意义何在?
  • 谢谢我试试这个sn-p!
  • 好的,我试试你的 sn-p 和
  • 我遇到了这种类型的错误...
猜你喜欢
  • 1970-01-01
  • 2011-03-12
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 2011-12-04
相关资源
最近更新 更多