Search code examples
iosswiftclosuresspotlight

Understanding crash report (Partial apply...) in Swift


I'm new to Swift programming, Recently I have implemented spotlight search for my app with Swift. Everything is working well and good however I"m getting few crash reports nowadays and I have no clue what is "Partial apply" and why it is crashing. As I'm unable to simulate it locally I"m trying to solve it by using crash logs. Following is the crash report...

Thread : Crashed: com.apple.root.default-qos
0  AppName                        0x1076d4 partial apply for static spotLightSearchManager.(indexAllItem in _03019F3D5642F39F2DF678310DF7E384)() -> () (spotLightSearchManager.swift:77)
1  AppName                        0x10761c partial apply for static spotLightSearchManager.(indexAllItem in _03019F3D5642F39F2DF678310DF7E384)() -> () (spotLightSearchManager.swift:73)
2  AppName                        0x107730 partial apply for thunk (spotLightSearchManager.swift)
3  AppName                        0x107808 partial apply for static spotLightSearchManager.(clearAllItem(spotLightSearchManager.Type) -> (OnCompletion : () -> ()!) -> ()).(closure #1) (spotLightSearchManager.swift:85)
4  CoreSpotlight                  0x2ae7ce0d __45-[CSSearchableIndexRequest _finishWithError:]_block_invoke + 20
5  libdispatch.dylib              0x2492fdd7 _dispatch_call_block_and_release + 10
6  libdispatch.dylib              0x2493b7b9 _dispatch_root_queue_drain + 1572
7  libdispatch.dylib              0x2493b193 _dispatch_worker_thread3 + 94
8  libsystem_pthread.dylib        0x24ac8e0d _pthread_wqthread + 1024
9  libsystem_pthread.dylib        0x24ac89fc start_wqthread + 8

I'm trying to reindex search item during app launch time.

 static func reIndexAllItem () {

        if #available(iOS 9.0, *) {

            clearAllItem(OnCompletion: indexAllItem)


        } else {
            // Fallback on earlier versions
            APLog("SpotLight index not added for older versions")
        }
    }
}

static private func indexAllItem () {

    for dataItem in APAuthUrlDataSource.sharedInstance().accountArray { // Crash logs points to this line.

        addSearchIndexForItem(dataItem as! APAuthUrlDataItm)
    }
} // Line number 77

static func clearAllItem (OnCompletion completion : (()-> Void)!) {

        if #available(iOS 9.0, *) {
            CSSearchableIndex.defaultSearchableIndex().deleteAllSearchableItemsWithCompletionHandler { (error) -> Void in
                // On completion.
                APLog("successfully cleared all index in spotlight search")
                **completion()** //Line number 85
            }
        } else {
            // Fallback on earlier versions
            APLog("SpotLight index not cleared for older versions")
        }
}

Note: reindexAlltem is getting called from didFinishLaunchingWithOptions method.

Any help would really appreciated, Thanks in Advance.


Solution

  • It seems that the cast to APAuthUrlDataItm fails. I assume that accountArray is not explicitly of type [APAuthUrlDataItm] otherwise why would you need that cast?

    Consider this code:

        for dataItem in accountArray {
            if let item = dataItem as? APAuthUrlDataItm {
                addSearchIndexForItem(item)
            }
        }