如何使用 Objective-C 实现 LocalNotification?

2023-11-27

我正在尝试在我的应用程序中实现本地通知。我不知道如何正确执行,下面的代码我用于新的数据到达过程,在如何实现通知过程之后,我在这两个过程中都需要通知foreground and background modes.

下面我已经成功background新数据到达检查方法的获取过程

//  Value matching and trying to get new data 
[live_array removeObjectsInArray:stored_array];
       
// if you require result as a string
NSString *result = [stored_array componentsJoinedByString:@","];
NSLog(@"New Data: %@", result);   // objects as string:

上面的代码最后给出了一些string值...一旦值到来,我想显示通知。我所做的一切都在应用程序委托中。


1) 当应用程序关闭时,安排一个本地通知将在 24 小时内触发

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.fireDate = [[NSDate date] dateByAddingTimeInterval:60*60*24];
    notification.alertBody = @"24 hours passed since last visit :(";
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];
}

2)如果应用程序已打开(在本地通知触发之前),则取消本地通知

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
}

//对于本地​​通知

我们需要做的第一件事是注册通知。

 // New for iOS 8 - Register the notifications
        UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
        UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];

现在让我们创建通知本身

    UILocalNotification *notification = [[UILocalNotification alloc] init];
    if (notification)
    {
            notification.fireDate = _datePicker.date;

            NSDate *fireTime = [[NSDate date] addTimeInterval:10]; // adds 10 secs
            notification.fireDate = fireTime;
            notification.alertBody = @"Alert!";

            notification.timeZone = [NSTimeZone defaultTimeZone];
            notification.applicationIconBadgeNumber = 1;
            notification.soundName = UILocalNotificationDefaultSoundName;
            switch (_frequencySegmentedControl.selectedSegmentIndex) {
                case 0:
                    notification.repeatInterval = NSCalendarUnitDay;
                    break;
                case 1:
                    notification.repeatInterval = NSCalendarUnitWeekOfYear;
                    break;
                case 2:


           notification.repeatInterval = NSCalendarUnitYear;
                break;
            default:
                notification.repeatInterval = 0;
                break;
        }
        notification.alertBody = _customMessage.text;

创建通知后,我们需要使用应用程序安排它。

// this will schedule the notification to fire at the fire date
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
// this will fire the notification right away, it will still also fire at the date we set
[[UIApplication sharedApplication] presentLocalNotificationNow:notification];

如果我们保持现在的样子,只有当应用程序在后台时,通知才会出现在屏幕上。为了在应用程序位于前台并且触发通知时显示某些内容,我们需要在应用程序委托中实现一个方法。

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Notification Received" message:notification.alertBody delegate:nil     cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alertView show];
}

我们在应用程序中添加了一个图标徽章,并且该图标徽章仅在应用程序处于后台时才会显示。通常,您希望在用户打开应用程序并看到通知后关闭该图标。我们还需要在应用程序委托中处理这个问题。

这两种方法就可以解决这个问题。

- (void)applicationWillEnterForeground:(UIApplication *)application 
{
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
    NSLog(@"%s", __PRETTY_FUNCTION__);
    application.applicationIconBadgeNumber = 0;
}

- (void)applicationDidBecomeActive:(UIApplication *)application 
{
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    NSLog(@"%s", __PRETTY_FUNCTION__);
    application.applicationIconBadgeNumber = 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Objective-C 实现 LocalNotification? 的相关文章

  • 如何在 EKRecurrenceRule 中设置一周中某一天的数组?

    我想在用户选择的特定日期每周添加事件 可以是一个或多个 也可以是一整天 我将用户选择的日期值存储在模型类变量中 但是 当我添加事件并选择日期时 假设今天是星期一 我选择星期二和星期三并保存 然后我查看周一和周三添加的 iPhone 日历 我
  • 播放(非库)Apple Music 内容 - 请求失败

    我正在尝试使用以下代码播放专辑 let predicate MPMediaPropertyPredicate value 1459938538 forProperty MPMediaItemPropertyAlbumPersistentID
  • 下标:使用字符串枚举访问我的字典值

    我想做类似的事情 使用字符串枚举访问我的字典值 我试图重载字典的下标但没有成功 访问字典 let district address JsonKeys district 其中 JsonKeys 是 enum JsonKeys String c
  • 应用程序发布后,对如何更新 UITableView 上的数据源感到困惑

    阅读文档后 我似乎误解了有关数据管理的一些概念 所以我试图澄清一些方面 如果这篇文章听起来多余和重复 请道歉 我的应用程序有多个 TableView 每个表视图都有一个 pList 形式的数据源 因此 我有几个属性列表用作我的表的数据源 目
  • 推送/呈现模态视图控制器

    我的视图控制器中有一个表 我们称之为 TVC1 我使用了 TVC1 中的行 以便用户除了 TVC1 上的数据之外还可以输入更多数据 因此 当有人点击 TVC1 中的特定行时 它将显示另一个视图控制器 我们称之为 TVC2 然而 当显示TVC
  • 访问iOS 7隐藏的UITableViewCellScrollView?

    苹果改变了UITableViewCelliOS 7 中的层次结构 使用iOS 6 1 SDK
  • Parse.com - 获取 [PFUser currentUser] 中包含的指针数据

    我正在使用 Parse com iOS SDK 并且我不知道需要调用什么方法来确保 PFUser currentUser 包含其中包含的每个指针的数据 这可能很简单 但是 作为这个平台的初学者 我找不到解决方案 只是为了澄清一下 我试图在下
  • 在两个数字之间设置 UILabel 文本动画?

    我是 iPhone 和 Mac 编程新手 之前为 Windows 开发过 我有一个问题 我如何制作动画text的财产UILabel两个数字之间 例如从5 to 80以 Ease Out 风格 是否可以与CoreAnimation 我已经在谷
  • 在 viewWillAppear( ) 中获取空值,但在 viewDidLoad( ) 中获取有效值

    When print mess 被称为来自viewDidLoad函数 它打印预期的内容 但是当从viewWillAppear函数 它给出空输出 完成分配后标签也没有更新viewDidLoad 为什么是这样 主视图控制器 if segue i
  • 以编程方式更改 UISlider 的范围

    如何以编程方式设置 UISlider 的最小最大范围 例如 虚拟代码 UISlider slider UISlider alloc init slider min 3 slider max 3 EDIT 所以我有以下内容 sl minimu
  • UIWebView 未正确加载 JavaScript - 嵌入式 Facebook 帖子

    Facebook 有一项新功能 允许用户将公共帖子嵌入网页中 我想尝试在 UIWebView 内的 iPhone 应用程序中使用它 转义必要的代码非常简单 但即使我手动转义代码 Web 视图也不会正确加载帖子 JavaScript 根本不起
  • 在 Objective-C 中获取对象的属性数组

    Objective C 中是否可以获取对象所有属性的数组 基本上 我想做的是这样的 void save NSArray propertyArray self propertyNames for NSString propertyName i
  • 如何在 SwiftUI 中呈现视图而不将其嵌入到当前导航流中?

    我已经完成了日志记录入门 并且需要呈现一个 HomeView 它对之前的导航流程一无所知 var body some View if viewModel isValidated destination else LoadingView 通过
  • Xcode UI 测试 - 通过 id 在 Webview 中查找元素

    我们的应用程序是混合的 包含 webview 我正在尝试使用 Xcode UI 测试自动化我们的应用程序 我能够使用以下方法找到网络按钮 let app XCUIApplication app launch let button app s
  • 如何确定 UINavigationController 中工具栏的高度?

    我有一个带有由 UINavigationController 呈现的工具栏的视图 当我处理 UIKeyboardWillShowNotification 时 我将整个屏幕向上滚动键盘的高度 问题是当显示键盘时 底部工具栏不显示 所以我只需将
  • 通知操作而不启动新活动?

    我计划提供一个包含两个操作的提醒通知 一个用于批准登录请求 一个用于拒绝登录请求 通过单击这些操作中的任何一个 我希望向我的服务器发出 HTTP 请求 最重要的是 我不想启动新的 Activity 或根本不想将用户重定向到我的应用程序 Co
  • iOS SDK:MapKit MKPolyLine 未显示

    我试图在地图上显示多段线 但该线没有显示 我尝试了很多事情 但注意到似乎有用 我检查了核心数据函数 它正在返回数据 所以这不是问题 它必须是我在地图点创建或地图上绘制的某个地方 我猜 我确信一定是某个地方出了点小错误 但我找不到它 My c
  • 在 iPhone 模拟器中从硬盘读取文件

    是否可以将文件 从我的普通文件系统 读入在 iPhone 模拟器上运行的 iPhone 应用程序 据我所知 iPhone 本身没有 用户可访问的 文件系统 但这只是为了测试 并且只能在模拟器中运行 该文件将是一个可以在应用程序运行时编辑的文
  • iOS SWIFT - WebRTC 从前置摄像头更改为后置摄像头

    WebRTC 视频默认使用前置摄像头 效果很好 但是 我需要将其切换到后置摄像头 但我无法找到任何代码来执行此操作 我需要编辑哪一部分 是 localView 或 localVideoTrack 还是捕获器 斯威夫特3 0 对等连接只能有一
  • NSUserDefaults、Settings.bundle 和应用程序组

    我有一个有 2 个目标的应用程序 主应用程序和 Today 扩展 为了在这些目标之间共享设置 我打开了应用程序组功能 添加了一个组group myApp com然后使用NSUserDefaults在主应用程序和今日扩展中都是如此 var d

随机推荐

  • Joda 时间 DateTime 错误地存储在数据库中

    我正在存储 JodaTimeDateTime字段到timestamptz列通过使用org jadira usertype usertype jodatime 1 9 应用服务器有 4时区 数据库服务器 9时区 new DateTime 结果
  • 如何设置和访问类的属性? [复制]

    这个问题在这里已经有答案了 假设我有这样的代码 class Example object def the example self itsProblem problem theExample Example print theExample
  • Mongoose:在 ReplicaSet 上读取

    我有一个 mongodb 副本集 我想从中读取主数据库和辅助数据库的数据 我使用此命令连接到数据库 mongoose connect mongodb user email protected user email protected use
  • 我可以直接从 chrome DevTools 编辑 Angular 项目的 CSS 文件吗?

    使用默认视图封装 模拟 在浏览器开发工具中设置组件样式的最有效方法是什么 我当前的工作流程涉及从开发工具进行大量繁琐的复制和粘贴 如下所示 Chrome 开发工具能够将 DOM 上所做的样式更改保存到源 css 文件中 使用工作区将更改保存
  • Python mysql 连接器返回元组

    我通过 mysql 连接器连接到 mysql 数据库 并运行一个简单的查询来提取 ID 列表 我需要循环该列表并将它们传递到其他代码中 由于某种原因 我得到了一个元组列表 这是预期的行为吗 如果不是 我做错了什么 这是我的代码片段 impo
  • 由于底部导航栏,Flutter 底部工作表不可见

    我试图显示底部表格并让用户选择 我确实喜欢这样 showModalBottomSheet context context builder builder return Column mainAxisSize MainAxisSize min
  • gcc -O2 与无原因错误

    编译包含以下内容的文件时open FILENAME O RDONLY 没有 O2标记一切都很好 但当 O2打开我得到 usr include x86 64 linux gnu bits fcntl2 h In function open u
  • 我如何知道我的 docker mysql 容器何时启动并且 mysql 何时准备好接受查询?

    我正在部署几个不同的 docker 容器 mysql 是第一个 我想在数据库启动后立即运行脚本并继续构建其他容器 该脚本一直失败 因为它试图在设置 mysql 的入口点脚本 来自这个官方的mysql容器 仍在运行 sudo docker r
  • 如何在控制台应用程序中检查 CTRL 键是否被按下#

    我要启动一个控制台应用程序 问题是如何确定CTRL键被单独按下而没有任何其他键 using System using System Text public class ConsoleKeyExample public static void
  • 时间的正则表达式

    我想要 HH MM SS AM PM 的正则表达式 这里 HH 必须是 1 12 MM 必须是 60 分钟 SS 照常 60 秒 我有正确的吗 0 1 9 1 0 2 0 5 0 9 0 5 0 9 59 44 29 60 AM am PM
  • 捆绑包安装使用不同的 Ruby 版本?

    我尝试使用 Knife solo 在 Vagrant 上安装 Ruby 2 0 0 p353 当我以 root 和 vagrant 身份登录时 ruby v返回 Ruby 2 0 0 p353 然而 当我跑步时bundle install在
  • 在运行时在 LINQ 查询中编写 where 子句

    我正在获取一个字符串数组 我想查看域对象中的一定数量的数据字段是否包含所有这些字符串 我知道编译时的数据字段 但不知道编译时数组的大小 有没有一种方法可以让我在运行时编写一个 where 子句 以便我可以在单个 linq 查询中执行我要查找
  • 如何根据字符串的值访问“struct”的成员?

    我想通过使用字符串的值来访问结构中的成员 struct hello world char rate char ssid 有一个变量可以说 char string ssid 我想使用这个字符串的值来引用ssid内的成员hello world结
  • 团队通道上的 botframework 1:1 身份验证 AAD 集成

    我正在寻找在团队频道上连接我的机器人 但我不知道如何确保它仅在我们的域 组织 中使用 我已测试寻找 身份验证 AAD Azure Web App 但它不适用于团队或网络聊天 因为端点地址未重定向 我已经测试了实施 AUTH 卡 但它不适用于
  • Qt:展开〜到主目录

    Qt 是否有任何独立于平台的功能来接受像 myfile 这样的路径 我知道关于wordexp 但是使用独立于平台的包装器会很好 Edit 谢谢大家的回复 myfile 只是一个例子 我正在寻找的是处理文件路径的功能 就像您可以在命令行上编写
  • 如何在 PowerShell 中将 SID 转换为帐户名?

    这个问题的灵感来自于这个类似的问题使用 C 标签 如果我有一个 Windows SID 并且想将其转换为可读的帐户名 如何使用 PowerShell 而不是 C 来实现此目的 现在 我有以下代码 它检索当前登录的用户帐户的组成员身份 Ide
  • Spartan-3E 上的随机数生成

    我需要在 Spartan 3E FPGA 上为我的遗传算法生成伪随机数 并且我想在 verilog 中实现它 您能给我任何关于此的指示吗 当然 Adam 的随机生成器是不可合成的 您必须显式创建一个LFSR 以下示例可能会有所帮助 它是一个
  • 返回 CStringArray 给出错误

    我试图返回一个 CStringArray 在我的 h 中我定义了 Private CStringArray array public CStringArray GetArray 在 我有 CQueue CQueue m hApp 0 m d
  • ASP.NET MVC 多个复选框

    我有一个List我想向用户显示大约 20 个项目 每个项目旁边都有一个复选框 Available我的 ViewModel 上的属性 提交表单时 我希望能够通过以下方法将选中的每个复选框的值传递回我的控制器方法Selections我的 Vie
  • 如何使用 Objective-C 实现 LocalNotification?

    我正在尝试在我的应用程序中实现本地通知 我不知道如何正确执行 下面的代码我用于新的数据到达过程 在如何实现通知过程之后 我在这两个过程中都需要通知foreground and background modes 下面我已经成功backgrou