2012-02-06 35 views
5

Tôi có một số tệp văn bản mà tôi muốn chuyển giữa 2 Ứng dụng. (ví dụ: các phiên bản miễn phí và trả phí của cùng một Ứng dụng).Lưu trữ NSArray trong UIPasteboard

Tôi đang sử dụng UIPasteboard để thực hiện việc này. Nội dung của các tập tin được lưu trữ trong bộ nhớ như NSArrays, và vì vậy tôi muốn sao chép các NSArrays này vào bảng (phiên bản lite), và đọc chúng từ các bảng (phiên bản đầy đủ).

Vì lý do nào đó, không thể đọc lại dữ liệu từ bảng. Dữ liệu đang được trả về dưới dạng đối tượng NSData, chứ không phải là NSArray, mà tôi nghĩ rằng nó không có định dạng bắt buộc đối với loại bảng thông báo mà tôi đang sử dụng, đó là "public.utf8-plain-text".

Khi tôi đọc/ghi NSStrings với loại bảng này, nó hoạt động tốt.

Tôi đã tìm kiếm thông qua tài liệu của Apple, v.v.

Viết cho các tông: (Trong pDataOutput Sau đây là một mảng các chuỗi, nội dung tập tin):

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

Đọc từ tông:

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

Các lợi nhuận trên:

PB Items = NSArray of count 0 

Như đã đề cập ở trên, nó trả về dữ liệu chính xác như NSStrings nếu được viết dưới dạng NSStrings.

Mọi trợ giúp sẽ được đánh giá rất nhiều. Cảm ơn Stephen C

Trả lời

7

Tôi đã gặp vấn đề tương tự và tôi nghĩ nhóm giá trị ValueForPasteboardType bị hỏng và luôn trả về NSData. Đây là giải pháp của tôi:

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

hy vọng điều này sẽ làm cho nó để mã kiểm tra vào nếu sẽ không được gọi nữa khi táo sửa chữa lỗi của họ

0

Tính đến iOS 8.3, UIPasteboard vẫn có lỗi này. Tôi đã viết phần mở rộng cho UIPasteboard để xử lý việc này:

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 
    } 
} 
Các vấn đề liên quan