I have an app that I want to extend with some CoreNFC tag reading.
I initiate a tagReaderSession with this code, which brings up a system dialoge telling the phone is currently in read mode:
_readerSession = [[NFCTagReaderSession alloc] initWithPollingOption:NFCPollingISO14443 delegate:self queue:nil] ;
_readerSession.alertMessage = @"Bip the top of the phone towards a NFC tag.";
[_readerSession beginSession];
This method is called when a tag has been read:
- (void)tagReaderSession:(NFCTagReaderSession *) session
didDetectTags:(NSArray<__kindofid> *)tags
My intended design:
- I use NFC tags as sports timing chips and the phone as a reader station.
- I would like to read many tags before invalidating the tag reader. Not just one tag and then closing down the session.
=> This I can do
- Between each tag read I would like to pop up a dialogue quickly, 2 seconds, with a message about the tag just scanned and a calculated time, position etc, in the race.
=> Here I get a problem with threads.
i.e:
- It is hard to move or customize the standard tag reading message from the system.
- it is hard to display something else at the same time. Everything else is gray appart from the system dialogue until the readerSession dialoge have been nvalidated.
- Even first doing readerSession.invalidate and then calling UI methods does not work (bringing up an AlertController). I then get this error below:
tagString = [tag.asNFCMiFareTag.identifier hexadecimalString];
[__viewController addResults:tagString];
[_readerSession invalidateSession];
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Result added" message:.......
2020-03-13 17:48:29.410911+0100 Sportimes[3249:1471500] *** Assertion failure in -[FBSSerialQueue assertOnQueue], /BuildRoot/Library/Caches/com.apple.xbs/Sources/FrontBoardServices/FrontBoard-626.4.1/FrontBoardServices/FBSSerialQueue.m:98
2020-03-13 17:48:29.411179+0100 Sportimes[3249:1471500] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'threading violation: expected the main thread'
I guess I need to go into threads.
Any advice?