我想在iOS中编写一个以编程方式连接到网络的启动守护程序。为了连接到网络,我正在使用Cykey's (David Murray) WifiManager app。在编写守护程序之前,它完美地工作(我在跳板调整中使用它)但现在它不扫描可用的网络(方法- (void)_scanDidFinishWithError:(int)error
未被调用)。通过记录,我发现调用了DMNetWorksManager中的方法_scan
,但未调用static void DMScanCallback(WiFiDeviceClientRef device, CFArrayRef results, int error, const void *token)
。我认为这是因为我在main.m文件中有runloop。这是我的代码:
的main.m:
int main (int argc, const char * argv[])
{
@autoreleasepool
{
// insert code here...
MSManager *server = [[MSManager alloc] init];
//start a timer so that the process does not exit.
/*NSDate *now = [[NSDate alloc] init];
NSTimer *timer = [[NSTimer alloc] initWithFireDate:now
interval:.01
target:server
selector:@selector(start)
userInfo:nil
repeats:NO];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:timer forMode:NSDefaultRunLoopMode];
[runLoop run];*/
[server start];
CFRunLoopRun();
}
return 0;
}
和 MSManager.m 中的启动方法:
- (void)start
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(managerDidFinishScanning)
name:kDMNetworksManagerDidFinishScanning
object:nil];
//Some other code here....
}
- (void)managerDidFinishScanning
{
//Do some work here
}
注意:我曾使用CFRunloop和NSRunLoop(在代码中注释),但没有一个工作。