在UIPasteboard中存储NSArray

时间:2012-02-06 17:23:15

标签: nsarray uipasteboard

我有几个文本文件,我想在2个应用程序之间传输。 (即同一应用程序的免费和付费版本)。

我正在使用UIPasteboard来执行此操作。这些文件的内容作为NSArrays保存在内存中,因此我想将这些NSArrays复制到粘贴板(精简版),并从粘贴板(完整版)中读取它们。

由于某种原因,无法从粘贴板读回数据。数据作为NSData对象返回,而不是NSArray,我认为这意味着它不是我使用的粘贴板类型所需的格式,即“public.utf8-plain-text”。

当我使用此粘贴板类型读取/写入NSStrings时,它可以正常工作。

我搜索了Apple文档等,看看我是否应该为NSArrays(或其他属性列表对象)使用不同的类型,但是画了一个空白。

写入粘贴板:(在下面的pDataOutput中是一个字符串数组,文件内容):

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);

以上回报:

PB Items = NSArray of count 0

如上所述,如果写为NSStrings,它会正确地将数据作为NSStrings返回。

非常感谢任何帮助。 谢谢 斯蒂芬C

2 个答案:

答案 0 :(得分:7)

我遇到了同样的问题,我认为valueForPasteboardType系列方法已经破坏,并且总是返回NSData。 这是我的解决方案:

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

希望这会使得一旦苹果修复他们的bug,if中的代码就不再被调用了

答案 1 :(得分:0)

从iOS 8.3开始,UIPasteboard仍然存在此错误。我为UIPasteboard编写了一个扩展来处理这个问题:

.rolloverImages{
    position: absolute;
    top: 150px;
    -webkit-transition: border-radius 1s; /* Safari */
    transition: border-radius 1s;
    padding: 5px 5px 5px 5px;
}

.rolloverImages:hover{
   border-radius:90px;
   padding: 0px 0px 0px 0px;
}