我正在开发一个需要持续运行并跟踪某些外围特性的应用程序。
前景一切正常 它也可以在后台运行,但我不确定我是否正确使用它。
我发布了很多关于状态恢复和实现willRestoreState
的帖子,但是很多帖子没有明确告诉你在调用这个方法时该怎么做。
我正在制作的过程是这样的:
我正在使用
创建一个中央管理员myCentralManager =
[[CBCentralManager alloc] initWithDelegate:self queue:nil
options:@{ CBCentralManagerOptionRestoreIdentifierKey:
@"myCentralManagerIdentifier" }];
从这里开始我正在做常规流程: 等待中央管理器上电(centralManagerDidUpdateState) - >扫描我的外设 - >连接到它 - >发现服务 - >发现特征 - >订阅charactristic - >阅读数据
然后我使用
杀了我的应用程序kill(getpid(), SIGKILL);
我等了几秒钟,然后从我的外围设备再次开始做广告。
然后我可以看到该过程重新开始,我的日志显示AppDelegate中的didFinishLaunchingWithOptions
被调用。
NSArray *identifiers = launchOptions[UIApplicationLaunchOptionsBluetoothCentralsKey];
if (identifiers && identifiers.count > 0) {
_centralManager = [[CBCentralManager alloc] initWithDelegate:self
queue:nil
options:@{CBCentralManagerOptionRestoreIdentifierKey:[identifiers objectAtIndex:0]}];
}
我还可以看到willRestoreState
和centralManagerDidUpdateState
被调用。
这是我迷失的地方。 接下来我该怎么办?如果我继续做常规流程(我在上面描述过,All似乎工作正常 - 并且与上面相同。
但是 - 我做对了吗?
我应该在willRestoreState
做些什么吗?
如果是,我应该做什么?
提前致谢!
答案 0 :(得分:1)
基本上你会将已经连接的外围设备交还给你 - 你应该保存对它的引用并为自己设置代理。这是我的代码,非常简单:
select *
from users u1
where verb = 'tried log in'
and not exists
(
select 1
from users u2
where u1.firstname = u2.firstname
and u1.lastname = u2.lastname
and u2.verb = 'logged in'
)