2012-04-25 159 views
1

有没有将对象从一个应用程序传输到另一个应用程序的方法?我的意思是类似的东西:将对象从一个应用程序传输到另一个应用程序

// 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的所有信息 - > char。另外我需要第二个应用程序中的第一个对象,而不是它的重复。

我想像它: 第一个应用程序启动第二个应用程序,之后,第一个应用程序谈到第二个:“嘿,#adr是变量(指针)的地址,去拿它”。之后,第二个应用程序将地址与变量(指针)相关联。但我不知道该怎么做。

回答

2

有迹象表明,立刻浮现在我的脑海里这样做的两个选项(我会建议实施的第一个选项):

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

  2. 传递使用一些进程间通信机制对象:这是一个比较复杂的,我宁愿推荐它为互相交谈持续应用 - 不只是传递一个对象到另一个应用程序上推出。一种方法是使用distributed objects。这使您可以处理不同的物理机器之间,甚至之间共享的对象,就好像它们是本地例如与他人分享你的第一个应用的对象,你可能会做(有一些限制。):

    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]; 
    
+0

非常感谢!这是我需要的 – Kira 2012-04-25 11:08:46

相关问题