我正在为发出通知的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作品,但后来我没有使用该参数。
任何想法我做错了什么?
谢谢。
4和5将是正确的方法。当它在调试器中不能正常工作时通过它,messageString的值是什么?当您使用方法4或5时,在安排通知之前什么是messageString?而且,显然,你的C字符串NULL是以NULL格式终止的吗? – quellish
我不认为我可以使用调试器......我使用一个独立的.mm/.h文件,该文件被编译成一个NDLL文件,稍后由我的OpenFl项目使用...... – ultranol
关于messageString在通知之前有什么是预定的,我传递了一个简单的短语,比如Hello world,所以我认为这就是4或5时应该发生的事情?另外,恐怕我不明白字符串究竟到达了什么地方,因为它最初在我的OpenFl源代码(.hx)中,它以某种方式调用.cpp文件中包含.h的.cpp文件它是一个char *数据类型,但在.hx上是一个String。不过,像这样的传递参数可以和float一起工作。 – ultranol