将对象从一个应用程序传输到另一个

时间:2012-04-25 09:25:15

标签: objective-c macos

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

// FirstApp:

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

//do some work...

[self runSecondAppWithObj:myObj];
}

// SecondApp:

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

myClass不那么简单,为什么我无法使用NSString传输所有信息 - >焦炭。此外,我需要第二个应用程序中的第一个对象,而不是它的副本。

我想象它: 第一个应用程序启动第二个应用程序,在第一个应用程序与第二个应用程序对话之后:“嘿,#ade是变量(指针)的地址,去拿它”。之后,第二个app使用变量(指针)和它的地址。但我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

有两个选项可以立即出现在我的脑海中(我建议实施第一个选项):

  1. myClass可序列化:这里的基本想法是您实施NSCoding协议,然后使用NSKeyedArchiver将其序列化为{ {1}}。然后可以容易地将字典转换成可互换的格式,例如, plist(XML)。然后,您可以将XML文本传递给第二个应用程序,并使用NSDictionaryNSDictionary将其反序列化。您可以在Apple的开发人员文档中找到有关archiving and serialization in Cocoa的良好指南和示例。

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

    NSKeyedUnarchiver

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

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