我正在研究一個iPhone應用程序,並且我從類型爲_bridge const void *
的方法中提取了一個值。 但我需要將此值轉換爲NSString
類型。Objective-C從(_bridge const void *)類型轉換爲(NSString *)
我看到一個典型的演員陣容沒有效果。
valueNSString = (NSString *) valueConstVoid
我正在研究一個iPhone應用程序,並且我從類型爲_bridge const void *
的方法中提取了一個值。 但我需要將此值轉換爲NSString
類型。Objective-C從(_bridge const void *)類型轉換爲(NSString *)
我看到一個典型的演員陣容沒有效果。
valueNSString = (NSString *) valueConstVoid
也許它可能首先橋接到NSData,然後才轉換成具有適當構造函數的NSString。
所以我們這裏有一個指向void的指針。指向void的指針就是您的物理對象(或字節序列)表示開始的內存位置。我們不知道它是什麼,這就是問題所在。投射只是指定特定類型的指針。換句話說,類型指針允許您知道特定屬性的位置以及實際物理表示的結束位置。讓我們試試這個。在調試器中分配value
並在po value
中鍵入後,停止調試器。告訴我們您打印的內容。
如何?你能給我一個代碼示例嗎?謝謝! – user2136333 2013-03-05 15:28:37
@ user2136333我需要更多信息來了解如何獲得此值。一旦提供,我馬上給出例子。 – bioffe 2013-03-05 15:35:58
原始類型是我從屬性返回的一組信息中提取的一系列數字。但是,出於某種原因,這組數字是_bridge const void *類型。我從來沒有遇到過這樣的數據,甚至不知道_bridge是什麼意思。問題是我需要將這些數據提供給只接受NSString類型的方法,所以我需要將它轉換爲NSString。 – user2136333 2013-03-05 15:36:57
(__bridge const void*)
不是一種類型,而是一個演員。所以你的價值可能是const void *
。如果您確定它是指向NSString
的指針,則可以按如下方式投射它:
const void *value;
NSString *stringValue = (__bridge NSString *)value;
問題是,爲什麼它會被聲明爲'void *'?似乎對我來說非常狡猾...... – trojanfoe 2013-03-05 15:32:43
__bridge在這種情況下有什麼意義? – bioffe 2013-03-05 15:32:56
謝謝我試試這個片段! – user2136333 2013-03-05 15:38:00
它實際返回的是哪種類型? – trojanfoe 2013-03-05 15:27:01
需要更多關於原始類型的信息。您將使用其中一種橋接的演員陣容,但void *不能說明字節的含義。 NSData可能是正確的,但NSString或其他的可能也是如此。 – danh 2013-03-05 15:30:30
原始類型是我從屬性返回的一組信息中提取的一系列數字。 但是,由於某些原因,這組數字是_bridge const void *類型。我從來沒有遇到過這樣的數據,甚至不知道_bridge是什麼意思。 問題是我需要提供這些數據給只接受NSString類型的方法,所以我需要將它轉換爲NSString。 – user2136333 2013-03-05 15:35:11