有没有办法将对象从一个应用程序转移到另一个应用程序?我的意思是这样的:
// 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使用变量(指针)和它的地址。但我不知道该怎么做。
答案 0 :(得分:2)
有两个选项可以立即出现在我的脑海中(我建议实施第一个选项):
让myClass
可序列化:这里的基本想法是您实施NSCoding
协议,然后使用NSKeyedArchiver
将其序列化为{ {1}}。然后可以容易地将字典转换成可互换的格式,例如, plist(XML)。然后,您可以将XML文本传递给第二个应用程序,并使用NSDictionary
和NSDictionary
将其反序列化。您可以在Apple的开发人员文档中找到有关archiving and serialization in Cocoa的良好指南和示例。
使用一些进程间通信机制传递对象:这有点复杂,我宁愿推荐它用于连续相互通信的应用程序 - 而不仅仅是传递一个对象发布时的另一个应用程序。一种方法是使用distributed objects。这使您可以在进程之间或甚至在不同的物理机器之间共享对象,就像它们是本地的一样(有一些限制)。例如,在第一个应用程序中共享对象,您可能会这样做:
NSKeyedUnarchiver
然后在第二个应用程序中,您将致电:
NSConnection *connection = [[NSConnection connectionWithReceivePort:[NSPort port]] sendPort:nil];
[connection setRootObject:theObject];
[connection registerName:@"com.example.whatever"];