2014-06-21 85 views
0

我正在爲發出通知的OpenFl程序編寫iOS本機擴展。出於某種原因,我簡直無法將char *數據類型從參數轉換爲alertBody屬性期望的NSString。將char *轉換爲NSString無法正常工作,UINotification將無法正確激發

const void issueNotification (const char* message) { 
    UILocalNotification* localNotification; 
    localNotification = [[UILocalNotification alloc] init]; 
    localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:(1/6)]; 
    //NSString* messageString = [NSString stringWithFormat:@"%c" , message]; // 1 
    //NSString* messageString = [NSString stringWithFormat:@"%s" , message]; // 2 
    //std::string messageString = std::string(message); // 3 
    //NSString *messageString = [NSString stringWithCString:message encoding:NSUTF8StringEncoding]; // 4 
    //NSString *messageString = [[NSString alloc] initWithCString:message encoding:NSUTF8StringEncoding]; // 5 
    NSString *messageString = @"AAAAA"; // 6 
    localNotification.alertBody = messageString; 
    localNotification.soundName = UILocalNotificationDefaultSoundName; 
    localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 
} 

1給了我 「警告:格式指定類型 '詮釋',但參數的類型爲 '爲const char *'[-Wformat]」 編譯時。

2編譯但通知文本顯示爲無法理解的東西(〜0y或類似的東西)。

3將不會編譯。

4和5將編譯但通知不會觸發。

6作品,但後來我沒有使用該參數。

任何想法我做錯了什麼?

謝謝。

+0

4和5將是正確的方法。當它在調試器中不能正常工作時通過它,messageString的值是什麼?當您使用方法4或5時,在安排通知之前什麼是messageString?而且,顯然,你的C字符串NULL是以NULL格式終止的嗎? – quellish

+0

我不認爲我可以使用調試器......我使用一個獨立的.mm/.h文件,該文件被編譯成一個NDLL文件,稍後由我的OpenFl項目使用...... – ultranol

+0

關於messageString在通知之前有什麼是預定的,我傳遞了一個簡單的短語,比如Hello world,所以我認爲這就是4或5時應該發生的事情?另外,恐怕我不明白字符串究竟到達了什麼地方,因爲它最初在我的OpenFl源代碼(.hx)中,它以某種方式調用.cpp文件中包含.h的.cpp文件它是一個char *數據類型,但在.hx上是一個String。不過,像這樣的傳遞參數可以和float一起工作。 – ultranol

回答

0

在較舊的環境中,請使用[NSString stringWithUTF8String:message]。在最近的XCode版本中,您只需編寫@(message),這是舊版本的糖。

+0

這給了我和我的方法2一樣的效果......無論如何,謝謝你的支持。 – ultranol

+0

@ultranol:這是將C字符串轉換爲NSStrings的文檔化方式。你的代碼有其他問題。您可能想嘗試打印'message'和'messageString'來查看它們包含的內容。 –

+0

謝謝。我想我必須找出一種方法來在我當前的設置中進行調試。 – ultranol

0

您可以使用[NSString stringWithFormat:@"%s",message]。它適用於我的代碼。