我有几个文本文件,我想在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
答案 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;
}