2

有没有办法将对象从一个应用程序转移到另一个应用程序?我的意思是这样的:

//第一个应用程序:

- (void)someFunction{
myClass *myObj = [[myClass alloc] init]

//do some work...

[self runSecondAppWithObj:myObj];
}

//第二个应用程序:

int main (int argc, const char * argv[])
{
    @autoreleasepool {
        myClass *obj = //get obj from firstApp
        //do some another work...
    }
    return 0;
}

myClass 不是那么简单,为什么我不能用 NSString -> char 传输所有信息。我也需要第二个应用程序中的第一个对象,而不是它的副本。

我想它像:第一个应用程序启动第二个应用程序,然后第一个应用程序与第二个应用程序交谈:“嘿,#adr 是变量(指针)的地址,去拿它”。之后,第二个应用程序获取变量(指针)及其地址。但我不知道怎么做。

4

1 回答 1

2

我立即想到了两个选项(我建议实施第一个选项):

  1. 使myClass可序列化:这里的基本思想是您实现NSCoding协议,然后将NSKeyedArchiver其用于将其序列化为NSDictionary. 然后可以轻松地将字典转换为可互换的格式,例如 plist (XML)。然后,您将 XML 文本传递给您的第二个应用程序,并在那里使用NSDictionaryand反序列化它NSKeyedUnarchiver。您可以在 Apple 的开发人员文档中找到有关Cocoa 中归档和序列化的良好指南和示例。

  2. 使用一些进程间通信机制传递对象:这有点复杂,我宁愿将它推荐给持续相互通信的应用程序——而不是仅仅在启动时将对象传递给另一个应用程序。一种方法是使用分布式对象。这使您能够在进程之间甚至在不同的物理机器之间共享对象,就好像它们是本地的一样(有一些限制)。例如,要在您的第一个应用程序中共享对象,您可以这样做:

    NSConnection *connection = [[NSConnection connectionWithReceivePort:[NSPort port]] sendPort:nil];
    [connection setRootObject:theObject];
    [connection registerName:@"com.example.whatever"];
    

    然后在第二个应用程序中,您将调用:

    id theObject = (id)[NSConnection rootProxyForConnectionWithRegisteredName:@"com.example.whatever" host:nil];
    [theObject someMethod];
    
于 2012-04-25T11:04:31.780 回答