PHILIPS HUE APPLE SDK 的问题

Posted

技术标签:

【中文标题】PHILIPS HUE APPLE SDK 的问题【英文标题】:Issue with PHILIPS HUE APPLE SDK 【发布时间】:2015-07-01 14:04:54 【问题描述】:

我刚刚写了Five 行代码,应用程序崩溃了。我检查了很多次,但我无法跟踪代码中的错误。

我已经添加了框架..没有警告没有错误但是为什么该死的应用程序崩溃了:

#import "ViewController.h"
#import <HueSDK_ios/HueSDK.h>

@interface ViewController ()

@property (strong, nonatomic) PHHueSDK *phHueSDK;
@property (nonatomic, strong) PHBridgeSearching *bridgeSearch;

@end

@implementation ViewController

- (void)viewDidLoad 
  [super viewDidLoad];

  self.phHueSDK = [[PHHueSDK alloc] init]; //Line 1

  [self.phHueSDK enableLogging:YES]; //Line 2

  [self.phHueSDK startUpSDK]; //Line 3

  self.bridgeSearch = [[PHBridgeSearching alloc] initWithUpnpSearch:YES andPortalSearch:YES andIpAdressSearch:YES]; //Line 4

// Start search for bridges
[self.bridgeSearch startSearchWithCompletionHandler:^(NSDictionary *bridgesFound) 
    // Search is complete, handle results (dictionary contains IP and mac addresses of bridges found)
]; Line 5


@end

崩溃日志为...

2015-04-23 17:15:58.750 FreshHUE[8298:161234] -[__NSCFString objectFromJSONString]: unrecognized selector sent to instance 0x7fb9fa547d60
2015-04-23 17:15:58.849 FreshHUE[8298:161234] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString objectFromJSONString]: unrecognized selector sent to instance 0x7fb9fa547d60'
*** First throw call stack:
(
        0   CoreFoundation                      0x0000000106512c65 __exceptionPreprocess + 165
        1   libobjc.A.dylib                     0x00000001061a9bb7 objc_exception_throw + 45
        2   CoreFoundation                      0x000000010651a0ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
        3   CoreFoundation                      0x000000010647013c ___forwarding___ + 988
        4   CoreFoundation                      0x000000010646fcd8 _CF_forwarding_prep_0 + 120
        5   FreshHUE                            0x0000000105c01cdd __38-[PHBridgeSearching startPortalSearch]_block_invoke + 332
        6   FreshHUE                            0x0000000105c006ac -[PHHttpRequester connectionDidFinishLoading:] + 101
        7   CFNetwork                           0x000000010859c0bc __65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke + 69
        8   CFNetwork                           0x000000010859c060 -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:] + 199
        9   CFNetwork                           0x000000010859c1c7 -[NSURLConnectionInternal _withActiveConnectionAndDelegate:] + 48
        10  CFNetwork                           0x000000010846b757 ___ZN27URLConnectionClient_Classic26_delegate_didFinishLoadingEU13block_pointerFvvE_block_invoke + 107
        11  CFNetwork                           0x0000000108538de1 ___ZN27URLConnectionClient_Classic18_withDelegateAsyncEPKcU13block_pointerFvP16_CFURLConnectionPK33CFURLConnectionClientCurrent_VMaxE_block_invoke_2 + 273
        12  CFNetwork                           0x0000000108456a26 _ZN19RunloopBlockContext13_invoke_blockEPKvPv + 72
        13  CoreFoundation                      0x0000000106419354 CFArrayApplyFunction + 68
        14  CFNetwork                           0x00000001084568e7 _ZN19RunloopBlockContext7performEv + 133
        15  CFNetwork                           0x0000000108456726 _ZN17MultiplexerSource7performEv + 256
        16  CFNetwork                           0x000000010845653c _ZN17MultiplexerSource8_performEPv + 72
        17  CoreFoundation                      0x0000000106446431 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
        18  CoreFoundation                      0x000000010643c2fd __CFRunLoopDoSources0 + 269
        19  CoreFoundation                      0x000000010643b934 __CFRunLoopRun + 868
        20  CoreFoundation                      0x000000010643b366 CFRunLoopRunSpecific + 470
        21  Foundation                          0x0000000105d5ef92 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 275
        22  FreshHUE                            0x0000000105c00fc7 __32-[PHBridgeSearching startSearch]_block_invoke + 253
        23  libdispatch.dylib                   0x0000000108cd0186 _dispatch_call_block_and_release + 12
        24  libdispatch.dylib                   0x0000000108cef614 _dispatch_client_callout + 8
        25  libdispatch.dylib                   0x0000000108cd9552 _dispatch_root_queue_drain + 1768
        26  libdispatch.dylib                   0x0000000108cdab17 _dispatch_worker_thread3 + 111
        27  libsystem_pthread.dylib             0x00000001090746cb _pthread_wqthread + 729
        28  libsystem_pthread.dylib             0x00000001090724a1 start_wqthread + 13
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)

更新问题

当我将第 4 行更改为(将门户搜索设置为否)时,我的应用运行良好。但我想要门户搜索,为什么会发生这种情况

self.bridgeSearch = [[PHBridgeSearching alloc] initWithUpnpSearch:YES andPortalSearch:NO andIpAdressSearch:YES]; //Line 4

【问题讨论】:

以上代码没有崩溃点。显示该completionHandler 块。我认为那里有错误。 完成块中什么都没有...我只写了这么多代码 【参考方案1】:

问题

使用Phillips Hue IOS Stack 时,我得到一个无法识别的选择器。有人可以帮忙吗?

2015-04-23 17:15:58.750 FreshHUE[8298:161234] -[__NSCFString objectFromJSONString]: unrecognized selector sent to instance 0x7fb9fa547d60
2015-04-23 17:15:58.849 FreshHUE[8298:161234] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString objectFromJSONString]: unrecognized selector sent to instance 0x7fb9fa547d60'
*** First throw call stack:
(
        0   CoreFoundation                      0x0000000106512c65 __exceptionPreprocess + 165
        1   libobjc.A.dylib                     0x00000001061a9bb7 objc_exception_throw + 45
        2   CoreFoundation                      0x000000010651a0ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
        3   CoreFoundation                      0x000000010647013c ___forwarding___ + 988
        4   CoreFoundation                      0x000000010646fcd8 _CF_forwarding_prep_0 + 120
        5   FreshHUE                            0x0000000105c01cdd __38-[PHBridgeSearching startPortalSearch]_block_invoke + 332
        6   FreshHUE                            0x0000000105c006ac -[PHHttpRequester connectionDidFinishLoading:] + 101
        7   CFNetwork                           0x000000010859c0bc __65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke + 69
        8   CFNetwork                           0x000000010859c060 -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:] + 199
        9   CFNetwork                           0x000000010859c1c7 -[NSURLConnectionInternal _withActiveConnectionAndDelegate:] + 48
        10  CFNetwork                           0x000000010846b757 ___ZN27URLConnectionClient_Classic26_delegate_didFinishLoadingEU13block_pointerFvvE_block_invoke + 107
        11  CFNetwork                           0x0000000108538de1 ___ZN27URLConnectionClient_Classic18_withDelegateAsyncEPKcU13block_pointerFvP16_CFURLConnectionPK33CFURLConnectionClientCurrent_VMaxE_block_invoke_2 + 273
        12  CFNetwork                           0x0000000108456a26 _ZN19RunloopBlockContext13_invoke_blockEPKvPv + 72
        13  CoreFoundation                      0x0000000106419354 CFArrayApplyFunction + 68
        14  CFNetwork                           0x00000001084568e7 _ZN19RunloopBlockContext7performEv + 133
        15  CFNetwork                           0x0000000108456726 _ZN17MultiplexerSource7performEv + 256
        16  CFNetwork                           0x000000010845653c _ZN17MultiplexerSource8_performEPv + 72
        17  CoreFoundation                      0x0000000106446431 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
        18  CoreFoundation                      0x000000010643c2fd __CFRunLoopDoSources0 + 269
        19  CoreFoundation                      0x000000010643b934 __CFRunLoopRun + 868
        20  CoreFoundation                      0x000000010643b366 CFRunLoopRunSpecific + 470
        21  Foundation                          0x0000000105d5ef92 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 275
        22  FreshHUE                            0x0000000105c00fc7 __32-[PHBridgeSearching startSearch]_block_invoke + 253
        23  libdispatch.dylib                   0x0000000108cd0186 _dispatch_call_block_and_release + 12
        24  libdispatch.dylib                   0x0000000108cef614 _dispatch_client_callout + 8
        25  libdispatch.dylib                   0x0000000108cd9552 _dispatch_root_queue_drain + 1768
        26  libdispatch.dylib                   0x0000000108cdab17 _dispatch_worker_thread3 + 111
        27  libsystem_pthread.dylib             0x00000001090746cb _pthread_wqthread + 729
        28  libsystem_pthread.dylib             0x00000001090724a1 start_wqthread + 13
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)

回答

在大多数情况下,答案与原因码中的信息有关。对于这种情况,所述原因是:

 '-[__NSCFString objectFromJSONString]: unrecognized selector sent to instance 0x7fb9fa547d60'

您的代码不会立即调用它。在这种情况下,我相信它可能会发生,因为您的事件生命周期不正确。我注意到您的模式与示例应用程序中显示的模式不同。我认为您需要交换第 2 行和第 3 行。您正在尝试在启动 SDK 之前设置它的属性。

我还将整个 SDK 启动序列移至 App Delegate 类,以防内部发生任何竞争情况。您用于搜索的两行似乎与QuickStart 示例应用程序内联。您还可以尝试运行示例应用程序以查看您的系统是否存在任何问题,或者它甚至可能是存储库中的错误。尝试如上所述调整架构,它应该会进一步隔离问题。

更新:

评论似乎支持 SDK 中可能发生内部竞争条件的结论。我建议按照 AppDelegate 的说明移动属性和前三行,看看当 portalSearch 设置为 YES 时这是否有效。

【讨论】:

我按照这里的顺序..developers.meethue.com/documentation/apple-api-guide 当将 portalSearch 设置为 NO .. 然后我的代码工作正常 我换了行,但没有任何反应......示例应用在我的系统上运行良好 @RahulMishra 只是好奇您是否通过将 SDK 逻辑移至 AppDelegate 得到不同的结果? 当我将代码写入应用委托时,也会发生同样的事情【参考方案2】:

在 PHILIPS 提供的示例应用程序中度过一整夜后,我能够找到错误。

在 PHILIPS HUE 的官方文档中他们没有提到我们必须添加 -ObjC 链接器标志

添加 -ObjC 链接器标志解决了我的问题

【讨论】:

以上是关于PHILIPS HUE APPLE SDK 的问题的主要内容,如果未能解决你的问题,请参考以下文章

Philips Hue REST api/nupnp:答案是空的

将 Philips Hue 与端口转发结合使用

执行 UPNP 扫描不会返回 Philips Hue Bridge

如何创建像 Philips Hue 这样的颜色选择器圈

飞利浦 HUE SDK 在 Swift 中

我在哪里把 .js 文件放在 Max/MSP 中?