The official examples of Deezer's API in swift show us a method called getObject in the DeezerManager.
func getObject(identifier: String, callback: @escaping (_ object: Any?, _ error: Error?) -> Void) {
DZRObject.object(withIdentifier: identifier, requestManager: DZRRequestManager.default(), callback: callback)
}
I want to play a track with id 533609232 (Drake - God's Plan).
To do it, I need to have the DZRTrack/DZRObject. So I called:
DZRObject.object(withIdentifier: "533609232", requestManager: DZRRequestManager.default(), callback: { (data, error) in
print(data, error)
//player stuff
})
But I've got an error NSException:
2019-05-02 22:50:23.845973+0200 my-app[51762:1318493] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
*** First throw call stack:
(
0 CoreFoundation 0x000000010af7d6fb __exceptionPreprocess + 331
1 libobjc.A.dylib 0x0000000109dd2ac5 objc_exception_throw + 48
2 CoreFoundation 0x000000010aecbddc _CFThrowFormattedException + 194
3 CoreFoundation 0x000000010af5786d -[__NSPlaceholderArray initWithObjects:count:] + 237
4 CoreFoundation 0x000000010af6c2a4 +[NSArray arrayWithObjects:count:] + 52
5 my-app 0x0000000106af3ef5 +[DZRObject infoURLWithBaseURL:identifier:] + 134
6 my-app 0x0000000106af4062 +[DZRObject objectWithRequestManager:baseURL:identifier:callback:] + 123
7 my-app 0x0000000106af3fb3 +[DZRObject objectWithIdentifier:requestManager:callback:] + 80
8 my-app 0x00000001069cd93d $s10my_app30DeezerViewControllerC5testayyF + 461
9 my-app 0x00000001069cf75e $s10my_app30DeezerViewControllerC0C6ActionyyF + 46
10 my-app 0x00000001069cf794 $s10my_app30DeezerViewControllerC0C6ActionyyFTo + 36
11 UIKitCore 0x000000010fd73204 -[UIApplication sendAction:to:from:forEvent:] + 83
12 UIKitCore 0x000000010f7c8c19 -[UIControl sendAction:to:forEvent:] + 67
13 UIKitCore 0x000000010f7c8f36 -[UIControl _sendActionsForEvents:withEvent:] + 450
14 UIKitCore 0x000000010f7c7eec -[UIControl touchesEnded:withEvent:] + 583
15 UIKitCore 0x000000010fdabeee -[UIWindow _sendTouchesForEvent:] + 2547
16 UIKitCore 0x000000010fdad5d2 -[UIWindow sendEvent:] + 4079
17 UIKitCore 0x000000010fd8bd16 -[UIApplication sendEvent:] + 356
18 UIKitCore 0x000000010fe5c293 __dispatchPreprocessedEventFromEventQueue + 3232
19 UIKitCore 0x000000010fe5ebb9 __handleEventQueueInternal + 5911
20 CoreFoundation 0x000000010aee4be1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
21 CoreFoundation 0x000000010aee4463 __CFRunLoopDoSources0 + 243
22 CoreFoundation 0x000000010aedeb1f __CFRunLoopRun + 1231
23 CoreFoundation 0x000000010aede302 CFRunLoopRunSpecific + 626
24 GraphicsServices 0x00000001136072fe GSEventRunModal + 65
25 UIKitCore 0x000000010fd71ba2 UIApplicationMain + 140
26 my-app 0x00000001068d4ebb main + 75
27 libdyld.dylib 0x000000010cfc9541 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
So I don't understand why I got this error. Am I doing wrong? Is it an other way to do it?
As stated by the Deezer SDK documentation (DZRObject.h)
You should not call this method directly on the DZRObject class but on one of its concrete subclass (e.g. DZRUser, DZRTrack, DZRArtist, ...)
Maybe try DZRTrack.object(withIdentifier... instead?