AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objective-C Callback

Ein Thema von jensw_2000 · begonnen am 23. Jul 2013 · letzter Beitrag vom 24. Jul 2013
Antwort Antwort
jensw_2000
(Gast)

n/a Beiträge
 
#1

Objective-C Callback

  Alt 23. Jul 2013, 22:34
Nabend,

ist zufällig jemand anwesend der ein bisschen Objektive-C spricht?

Die EKEventStore Instanzmethode
Code:
- (void)requestAccessToEntityType:(EKEntityType)entityType completion:(EKEventStoreRequestAccessCompletionHandler)completion
erwartet im completion Parameter eine Callback Methode.

Dies ist die Deklaration des Callbacks:
Code:
typedef void (^EKEventStoreRequestAccessCompletionHandler)(BOOL granted, NSError *error);
Wie könnte das unter Delphi / Oxygene aussehen?

Das will irgendwie noch nicht so richtig ...
Delphi-Quellcode:
type
      callback = procedure (granted:BOOL; error:NSError);
  Mit Zitat antworten Zitat
EgonHugeist

Registriert seit: 17. Sep 2011
187 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Objective-C Callback

  Alt 23. Jul 2013, 22:56
type
PNSError = ^NSError;
callback = procedure (granted:WORDBOOL; error: PNSError); CDECLS/stdcall? welche call convention?
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#3

AW: Objective-C Callback

  Alt 23. Jul 2013, 23:13
CDECLS/stdcall? welche call convention?
Ist keine Lib, sondern ein Framework, das direkt gekinkt wird.

Ich glaube ich bin auch auf dem Holzweg.
Der Type EKEventStoreRequestAccessCompletionHandler ist offensichtlich bereits deklariert.
http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKEventStoreClassRef/Reference/Reference.html%23//apple_ref/occ/instm/EKEventStore/requestAccessToEntityType:completion:


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{
 
                        }
 }];
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

AW: Objective-C Callback

  Alt 24. Jul 2013, 01:11
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);

Geändert von jensw_2000 (24. Jul 2013 um 05:21 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Objective-C Callback

  Alt 24. Jul 2013, 08:16
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#6

AW: Objective-C Callback

  Alt 24. Jul 2013, 08:33
Jepp. Darum schrieb ich "Sollte man noch ausschmücken".
Wollte mir nur Tipparbeit sparen.
Aber bitte :

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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz