2013-04-05 40 views
0

我有這行代碼:的sprintf對目標C

sprintf (label, "Lon %s Lat %s", lonStr, latStr); 

,我想,以取代這一個:

NSString*label = [NSString stringWithFormat:@"%s %s", lonStr, latStr]; 

一旦我更換,我得到一個警告,指出未使用的變量「 label'。同樣,應該顯示的文本不再顯示。

label被聲明爲這樣的:

char label[256] = { 0 }; 

有什麼我很想念這裏?

嗨再次,

所以下面你的建議,並做一些研究,這是我的解決方案後。請注意,變量'label','labeltwo'和'labelthree'來自C++代碼,因此必須將其轉換爲Objective-C:

coordLabel.text = [NSString stringWithFormat:@「%@%@」,[NSString stringWithCString:標籤編碼:NSISOLatin1StringEncoding],[NSString stringWithCString:labeltwo encoding:NSISOLatin1StringEncoding]];

謝謝

+0

你說「看來,應該不再顯示的文字。」首先打印文本的代碼在哪裏?是否應該在控制檯窗口中輸出,或者您是否嘗試將其鏈接到Interface Builder中的標籤? – 2013-04-05 04:43:42

+0

我正在嘗試將其鏈接到Interface Builder中的標籤。謝謝。 – Tripon 2013-04-05 16:34:53

回答

0

NSString是一個對象,並且不會打印出任何東西(除非你使用NSLog(@"%@", label),原因你得到的未使用變量警告是因爲你不使用NSString *label曾經,你可以通過把NSLog(@"%@", label)擺脫警告。

0

NSString *label包含格式的輸出,你需要分配一個字符串,無論你想你的經/緯度來顯示。

6

我擔心你是什麼缺少的是基本的理解目標C的nding及其與C.

NSString *label = [NSString stringWithFormat:@"%s %s", lonStr, latStr]; 

關係將創建由可變label指出一個NSString對象。

NSStringchar *是兩個完全不同的實體,因爲前者是一個完整的Objective-C對象,而後者是一個普通的C字符串。不要指望如果你錯誤地認爲這兩件事會發生什麼好事,並且作爲一般性建議,儘可能使用NSString對象。

現在,回到您的問題,你在做什麼是創建一個格式NSString,所以你只能錯過你實際輸出其內容的步驟。您可以輕鬆地通過使用NSLog功能實現這一目標如下

NSLog(@"%@", label); 

%@是用於Objective-C對象格式說明,但NSLog接受(s)printf接受任何其他說明符,所以最後你可以讓一切更短和簡單的寫的唯一行:

NSLog(@"%s %s", lonStr, latStr) 

底線我推斷lonStrlatStr是C字符​​串,但考慮到我告訴你我之上強烈建議喲您可以改爲使用NSString實例。

編輯

而且

NSString*label = [NSString stringWithFormat:@"%s %s", lonStr, latStr]; 

char label[256] = { 0 }; 

是可變label的兩個聲明(用兩種不同類型的,額外的喜悅!)。

編譯器應(理所當然),給你的錯誤Redefinition of 'label',所以我很難相信,你的代碼可以到目前爲止編譯。

+0

有可能'的NSString * label'和'字符標籤[256]'在不同的範圍界定,因此它可以編譯 – 2013-04-05 05:37:52

+0

是,yhat是爲它編譯唯一合理的解釋,但它是完全偶然的,並不會仍然有任何意義 – 2013-04-05 05:39:00

+0

謝謝加布裏埃爾我實際上得到一個警告:「未使用的變量」標籤「」。 – Tripon 2013-04-05 16:37:15

0

要在Interface Builder中鏈接您的標籤,它需要是NSTextField而不是NSString。它還需要在IBOutlet宏之後。你的聲明應該是這樣的:

IBOutlet NSTextField *label; 

然後,在你的XIB文件,你可以添加一個標籤,並通過按住Ctrl鍵單擊拖動到任何對象包含它鏈接到這個IBOutlet中。完成此操作後,對NSTextField所做的任何更改都會在視圖中自動顯示。

Here是如何在Interface Builder網點連接一個簡短的教程。

以下是有關NSTextField(適用於Mac OS X)或類似UITextField(適用於iOS)的文檔。