如何在Obj-C中存储我的委托实例

在接触 C 语言之前我已经做了很多年的 LUA 了,现在感到有点懵。我不确定如何存储我的委托对象,并在稍后引用它。我能够创建新实例,但需要从 Corona Enterprise 插件引用先前创建的实例。希望有人能帮助我解决这个小问题。

因此,我在 CoronaIbeaconDelegate @interface 之后这样定义一个变量:

CoronaIBeaconDelegate *coronaIBeaconDelegate;

稍后在我的 Corona 插件类代码中,我创建了一个 CoronaIBeaconDelegate 实例,如下所示:

int
PluginLibrary::scan( lua_State *L )
{

int listenerIndex = 1;
coronaIBeaconDelegate = [[CoronaIBeaconDelegate alloc] firstRegion];

if ( CoronaLuaIsListener( L, listenerIndex, kEvent ) )
{

    Self *library = ToLibrary( L );

    CoronaLuaRef listener = CoronaLuaNewRef( L, listenerIndex );
    library->Initialize( listener );

    // Create event and add message to it
    CoronaLuaNewEvent( L, kEvent );

    lua_pushstring(L,"scan");
    lua_setfield(L, -2, "phase" );

    lua_pushboolean(L,true );
    lua_setfield(L, -2, "scanning" );

    lua_pushstring( L, "Scanning Started" );
    lua_setfield( L, -2, "message" );
    // Dispatch event to library's listener
    CoronaLuaDispatchEvent( L, library->GetListener(), 0 );

}

return 0;

}

这样做可以正常工作,但是当将委托存储在 coronaIBeaconDelegate 变量中时,我会收到一个警告,显示“找不到实例方法-firstRegion”,但这会像预期那样调用 firstRegion 类函数,我的 iBeacon 代码就开始扫描了。

我想做的是能够使用先前的实例调用 CoronaIBeaconDelegate 类中的另一个名为 stopRangingForBeacons 的函数,如下所示:

int
PluginLibrary::stopscan( lua_State *L )
{
int listenerIndex = 1;
[coronaIBeaconDelegate stopRangingForBeacons];

if ( CoronaLuaIsListener( L, listenerIndex, kEvent ) )
{

    Self *library = ToLibrary( L );

    CoronaLuaRef listener = CoronaLuaNewRef( L, listenerIndex );
    library->Initialize( listener );

    // Create event and add message to it
    CoronaLuaNewEvent( L, kEvent );

    lua_pushstring(L,"stopscan");
    lua_setfield(L, -2, "phase" );

    lua_pushboolean(L,true );
    lua_setfield(L, -2, "scanning" );

    lua_pushstring( L, "Scanning Stopped" );
    lua_setfield( L, -2, "message" );
        // Dispatch event to library's listener
    CoronaLuaDispatchEvent( L, library->GetListener(), 0 );

 }

 return 0;
}

发生的是一个空值错误。我尝试将以前的实例存储在 coronaIBeacon 变量中,但它不起作用。我真的无法解决这个简单的任务。

请帮帮我,谢谢!

点赞
用户3193526
用户3193526

和往常一样,我会自己回答我的问题。我的问题是由于我初始化实例的方式造成的。以下是在我的情况下正确的方式。

IBeaconDelegate = [[CoronaIBeaconDelegate alloc] init];
[IBeaconDelegate firstRegion];
2016-01-10 21:45:50