2012-04-25 209 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

相關問題