我该如何在Delphi/Firemonkey(XE5或XE6)中声明一个简单的ObjC类?我想创建一个动画代理类,并在这个类中添加一些代理方法。
谢谢!
谢谢!
ISampleDelegate = interface(IObjectiveC)
['{put-your-own-guid-here}'] // <-- Press Ctrl+Shift+G to create your own guid - must be unique for every interface
procedure DispatchItem(Sender: Pointer); cdecl;
end;
TSampleDelegate = class(TOCLocal, ISampleDelegate)
private
FOwner: TMenuItem;
public
constructor Create(AOwner: TMenuItem);
procedure DispatchItem(Sender: Pointer); cdecl;
end;
constructor TSampleDelegate.Create(AOwner: TMenuItem);
begin
inherited Create;
FOwner := AOwner;
end;
FDelegate: ISampleDelegate;
FDelegate := TSampleDelegate.Create(Self);
指定您的代表:
Item.setDelegate(FDelegate);
释放你的委托:
Item.setDelegate(nil);
TNSObject.Wrap((FDelegate as ILocalObject).GetObjectID).release; // don't forget this one! The create constructor calls Alloc in inherited
FDelegate := nil;
public
(就像Sebastian所做的那样)。要么这样,要么确保适当的RTTI信息暴露给方法,否则在创建对象时会引发一个带有消息“Method ... not found”的EObjectiveC
异常。Item.setDelegate(FDelegate);
是错误的,必须使用GetObjectID
来获取指向委托对象的指针。在我进行更改之前,我一直遇到访问冲突问题。