如何在操作系统早于 iOS 4 的设备上忽略 UILocalNotification?

Posted

技术标签:

【中文标题】如何在操作系统早于 iOS 4 的设备上忽略 UILocalNotification?【英文标题】:How do I ignore UILocalNotification on devices with OS's older than iOS4? 【发布时间】:2010-08-22 16:18:43 【问题描述】:

我正在制作的应用中使用本地通知。

我用这个:

Class myClass = NSClassFromString(@"UILocalNotification");
if (myClass) 
//Local Notification code

在不支持时避免使用 UILocalNotifications。

但我的应用程序在启动时崩溃并显示此错误代码:

警告:无法读取符号 “/库/MobileSubstrate/MobileSubstrate.dylib” (文件未找到)。 dyld:符号不是 成立: _OBJC_CLASS_$_UILocalNotification 引用自: /var/mobile/Applications/FCFFFCB2-A60B-4A8D-B19B-C3F5DE93DAD2/MyApp.app/MyApp 预计在: /System/Library/Frameworks/UIKit.framework/UIKit

临时数据格式化程序 不可用,过一会再试 '继续'。 (调用 dlopen 不安全 此时。) mi_cmd_stack_list_frames:不够 堆栈中的帧。 mi_cmd_stack_list_frames:不够 堆栈中的帧。

如何防止这种情况发生?

【问题讨论】:

【参考方案1】:

正确的做法是:

Class localNotificationClass = NSClassFromString(@"UILocalNotification");
if (localNotificationClass != nil) 
    // The UILocalNotification class is available
    UILocalNotification* localNotification =
        [[localNotificationClass alloc] initWith....];

您可以使用[UILocalNotificationClass alloc],因为当您的代码在该类不可用的旧ios 上加载时,这会导致链接错误。而这正是你想要阻止的。

顺便说一句:那些 MobileSubstrate 错误是您越狱手机时得到的:一个不可预测/未定义的开发平台 :-)

【讨论】:

嘿嘿好的。迫不及待想用 iPhone 4 替换我的 2g。无需解锁和越狱。【参考方案2】:

没关系.. 我用过:

Class myClass = NSClassFromString(@"UILocalNotification");
if (myClass) 
   //Local Notification code
   UILocalNotification *notification = [[myClass alloc] init];

代替:

Class myClass = NSClassFromString(@"UILocalNotification");
if (myClass) 
  //Local Notification code
  UILocalNotification *notification = [[UILocalNotification alloc] init];

它成功了!

已编辑清除!

【讨论】:

它适用于 iOS4,但在旧版本上会失败。看我的回答。 但是在旧设备上,IF 语句会是假的,所以代码不会被执行。还是不是这样? 对不起应该更清楚,但这是在里面: Class localNotificationClass = NSClassFromString(@"UILocalNotification"); if (localNotificationClass != nil) block.. 所以我基本上和你一样做 st3fan。 @Tom Irving 虽然它没有在旧设备上执行 [[UILocalNotification alloc] init];部分使它崩溃.. 你不能做那种分配,因为就像 St3fan 说的那样,它会导致链接器错误。而是做 [localNotificationClass alloc]

以上是关于如何在操作系统早于 iOS 4 的设备上忽略 UILocalNotification?的主要内容,如果未能解决你的问题,请参考以下文章

UIDocumentBrowserViewController 忽略 iOS13 设备上的文档类型(com.apple.pkpass)

在 iOS 上使用大小类的不同 UI

SOAP Web 服务不仅适用于 IOS 设备,它还适用于 soap ui 和 Android 设备

iOS 7 UI 转换问题:屏幕底部的触摸事件被忽略

带有手动输入和动态最小日期的 jQuery UI 日期选择器

flutter 在windows和linux上运行IOS UI模拟器