2016-05-13 4 views
1

Ich habe ein TPushEvent und TKinveyProvider auf meinem firemonkey-FormularWie stelle ich den Provider für ein TPushEvent ein?

deklariert Ich versuche, den Wert des Providers in Code manuell festzulegen. Ich weiß, dass standardmäßig, wenn Sie diese Steuerelemente in einem Formular ablegen, die Provider-Eigenschaft des PushEvent automatisch auf TKinveyProvider gesetzt wird. Ich arbeite jedoch an einem offensichtlichen Fehler und möchte ihn später einstellen.

Stimmt die Provider-Eigenschaft in diesem Code richtig?

//In my form class 
//... 
myPushEvents: TPushEvents; 
myKinveyProvider: TKinveyProvider; 

//later on in one of my procedures/methods 
//... 
myPushEvents.Provider := myKinveyProvider; 

Wenn ich mir den Wert auch ein später, nachdem sie gesetzt haben sollte, scheint es noch nil zu sein.

ProviderProvider scheint als IBackendProvider definiert zu sein, das ist eine Schnittstelle und ich bin mir nicht sicher, ob ich ihm seinen Provider anders zuweisen muss als ich mit einem einfachen Datentyp wie einem Integer oder einem String.

+0

Sie können eine Klasse zuweisen, die diese Schnittstelle direkt implementiert und eine Schnittstelle zu dieser Schnittstelle bildet. Zerstören Sie die Klasse nicht manuell, denn das Referenzzählen erledigt das für Sie. – Johan

+0

Also das ist ein Nein? – BIBD

+0

Genau so. – Johan

Antwort

1

Ja, das ist der richtige Weg.

myPushEvents.Provider := myKinveyProvider 

In diesen Fällen myPushEvents.Provider wird eine Referenz auf myKinveyProvider zugeordnet ist. Sie müssen kein spezielles Casting durchführen, da myPushEvents.Provider etwas erwartet, das der IBackendProvider Schnittstelle entspricht, und myKinveyProvider (eine TKinveyProvider) tut.

Hinweis: In meinem speziellen Fall, dank myPushEvents.Provider, die als Ergebnis einer Timer-Beendigung gesetzt wurde, war es in der Tat immer noch nil.

ein Hinzufügen von

if (myPushEvents.Provider <> nil) then 
begin 
    // ... use myPushEvents.Provider 
end; 

geschützt, um die Verwendung von ihm, bis der Wert richtig eingestellt worden war, nachdem der Timer lief.