2014-06-21 103 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]。它适用于我的代码。