2012-02-06 17 views
5

मेरे पास कई टेक्स्ट फ़ाइलें हैं जिन्हें मैं 2 ऐप्स के बीच स्थानांतरित करना चाहता हूं। (यानी एक ही ऐप के मुफ्त और भुगतान संस्करण)।UIPasteboard में NSArray संग्रहीत करना

मैं ऐसा करने के लिए यूआईपीएस्टबोर्ड का उपयोग कर रहा हूं। फ़ाइलों की सामग्री एनएसएआरआरएएस के रूप में स्मृति में आयोजित की जाती है, और इसलिए मैं इन एनएसएआरआरई को पेस्टबोर्ड (लाइट संस्करण) में कॉपी करना चाहता हूं, और उन्हें पेस्टबोर्ड (पूर्ण संस्करण) से पढ़ना चाहता हूं।

किसी कारण से डेटा को पेस्टबोर्ड से वापस नहीं पढ़ा जा सकता है। डेटा एनएसएआरएआरए के बजाए एनएसडीएटी ऑब्जेक्ट के रूप में वापस किया जा रहा है, जो मुझे लगता है कि यह मतलब है कि यह पेस्टबोर्ड प्रकार के लिए आवश्यक प्रारूप में नहीं है, जो "public.utf8-plain-text" है।

जब मैं इस पेस्टबोर्ड प्रकार के साथ एनएसएसटींग्स ​​को पढ़/लिखता हूं, तो यह ठीक काम करता है।

मैंने ऐप्पल डॉक्स इत्यादि के माध्यम से खोज की, यह देखने के लिए कि क्या एनएसएआरआरएएस (या अन्य संपत्ति सूची ऑब्जेक्ट्स) के लिए एक अलग प्रकार का उपयोग करना चाहिए, लेकिन एक खाली खींचा।

पेस्टबोर्ड के लेखन:

NSMutableArray *lArrayCopy = [gGlobalData.cPasteBoard.items mutableCopy]; 
[lArrayCopy replaceObjectAtIndex:pDataFileIdx 
        withObject:[NSDictionary dictionaryWithObject:pDataOutput 
                 forKey:@"public.utf8-plain-text"]]; 
gGlobalData.cPasteBoard.items = lArrayCopy; 
[lArrayCopy release]; 

पेस्टबोर्ड से पढ़ रहा है:

NSArray *lPBItems = [pPasteBoard valuesForPasteboardType:@"public.utf8-plain-text" 
               inItemSet:nil]; 
NSLog(@"PB Items = NSArray of count %d", lPBItems.count); 

ऊपर रिटर्न:

(निम्नलिखित pDataOutput में तार की एक सरणी, फ़ाइल सामग्री है)
PB Items = NSArray of count 0 

जैसा ऊपर बताया गया है, यह एनएसएसटींग्स ​​के रूप में लिखे गए एनएसएसटींग्स ​​के रूप में सही ढंग से डेटा देता है।

किसी भी मदद की बहुत सराहना की जाएगी। धन्यवाद स्टीफन सी

उत्तर

7

मैं एक ही मुद्दे में भाग गया और मुझे लगता है कि मूल्यों के मूल्यफॉरबोर्ड टाइप प्रकार के परिवार टूट गए हैं और हमेशा एनएसडीटा वापस आते हैं। यहाँ मेरी समाधान है:

NSArray * lArrayFromPasteBoard = [pPasteBoard valueForPasteboardType:@"com.my.custom.type"]; 
if ([lArrayFromPasteBoard isKindOf:[NSData class]]) 
{ 
    lArrayFromPasteBoard = [[NSPropertyListSerialization propertyListWithData:(NSData*)lArrayFromPasteBoard options:0 format:0 error:0]; 
} 

उम्मीद है कि इस कर देगा यह इतना में यदि अब और कहा जाता है नहीं होगा एक बार सेब उनके बग

0

ठीक करता है iOS 8.3 के रूप में, UIPasteboard अभी भी इस बग है कोड। मैंने इसे संभालने के लिए यूआईपीएस्टबोर्ड के लिए एक एक्सटेंशन लिखा:

extension UIPasteboard { 
    func arrayForPasteboardType(pasteboardType: String) -> NSArray? { 
     switch valueForPasteboardType(pasteboardType) { 
     case let array as NSArray: 
      return array 
     case let data as NSData: 
      if let array = NSPropertyListSerialization.propertyListWithData(data, options: 0, format: nil, error: nil) as? NSArray { 
       return array 
      } 
     default: 
      break 
     } 

     return nil 
    } 
} 
संबंधित मुद्दे