![]() |
Objective-C Callback
Nabend,
ist zufällig jemand anwesend der ein bisschen Objektive-C spricht? Die EKEventStore Instanzmethode
Code:
erwartet im completion Parameter eine Callback Methode.
- (void)requestAccessToEntityType:(EKEntityType)entityType completion:(EKEventStoreRequestAccessCompletionHandler)completion
Dies ist die Deklaration des Callbacks:
Code:
Wie könnte das unter Delphi / Oxygene aussehen?
typedef void (^EKEventStoreRequestAccessCompletionHandler)(BOOL granted, NSError *error);
Das will irgendwie noch nicht so richtig ...
Delphi-Quellcode:
type
callback = procedure (granted:BOOL; error:NSError); |
AW: Objective-C Callback
type
PNSError = ^NSError; callback = procedure (granted:WORDBOOL; error: PNSError); CDECLS/stdcall? welche call convention? |
AW: Objective-C Callback
Zitat:
Ich glaube ich bin auch auf dem Holzweg. Der Type ![]() ![]() So sieht das Aufruf unter Obj-C aus ...
Code:
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted,NSError* error){
//Access not granted------------- if(!granted){ } //Access granted------------------ }else{ } }]; |
AW: Objective-C Callback
Hab's herausgefunden.
Für die Nachwelt ... Falls ihr mal aus Oyxgene oder Firemonkey auf den "Kalenderspeicher" (EKEventStore) des iPhones zugreifen wollt und euch freut, dass im Simulator alles schick läuft, dann testet eure App mal auf dem Device. iOS 6.0 oder höher lässt die App crashen, wenn sie keine Frage an den Benutzer stellt, ob auf den Kalender zugegriffen werden darf.. Im Kern formuliert man die Abfrage mit Pascal wir folgt. (Sollte man natürlich noch ein bisschen ausschmücken.)
Code:
var callback:EKEventStoreRequestAccessCompletionHandler :=
procedure (granted:Boolean;error:NSError) begin if not assigned(error) then begin if granted then NSLog('EKEventStore Access >> Access granted') else // alles supi NSLog('EKEventStore Access >> Access blocked'); // ggf App kontrolliert beenden end else NSLog('%@',error); end; _eventStore.requestAccessToEntityType(EKEntityType.EKEntityTypeEvent) completion(&callback); |
AW: Objective-C Callback
Ich würde die App bei Nichtgewährung der Rechte keinesfalls beenden. Die netten Apple-Bestimmungen für den Store besagen unter anderem, dass eine App funktionieren muss, egal ob sie ihre Rechte bekommt oder nicht. Vor dem Hintergrund wäre es vermutlich besser, dem User mitzuteilen, dass dieser Programmteil ohne die Rechte nicht geht (alles andere muss aber weiterhin gehen!). Wenn das jeweilige Recht nötig für die einzige bzw. alle Funktionen ist, dann auch einen Hinweis, aber App laufen lassen, und fein säuberlich alle Operationen dagegen absichern, dass sie crashen wenn die verweigerte Funktionalität benutzt werden soll. Je nach dem ein Höllenaufwand, aber der Apfel befiehlt es.
|
AW: Objective-C Callback
Jepp. Darum schrieb ich "Sollte man noch ausschmücken".
Wollte mir nur Tipparbeit sparen. Aber bitte :wink:: In der Live App prüfe ich erstmal ob der EventStore überhaupt "requestAccessToEntityType" unterstützt. Könnte ja auch iOS kleiner 6.0 sein. Dann hole ich mir den aktuellen Authentifizierungsstatus mit "var authStat := EKEventStore.authorizationStatusForEntityType(EKEn tityType.EKEntityTypeEvent);" und prüfe ab, ob der User die App bereits berechtigt hat. Falls nicht, prüfe ich die verbleibenden 3 Zustände ("User wurde noch nie gefragt", "User hat den Zugriff nicht gewährt" und "User kann den Zugriff auf Grund von Restrictions nicht freigeben") und reagiere beim Aufruf der Kalenderfunktionen mit einer entsprechenden UIAlert Message bzw. mit der obigen Authentifizierungsabfrage. Den EKEventStore halte ich in einer ShardInstance in einer "public static class". Somit laufen alle Aufrufe immer durch die obige Logik. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz