2014-02-12 44 views
0

我有一個自定義的類,我希望能夠放在粘貼板上。 這裏是我到目前爲止的代碼如何允許自定義項目被複制?

- (NSArray *)writableTypesForPasteboard:(NSPasteboard *)pasteboard { 

    static NSArray *writableTypes = nil; 



    if (!writableTypes) { 

     writableTypes=[NSArray arrayWithObjects:(NSString *)kUTTypeXML, nil]; 

    } 

    return writableTypes; 

} 

- (id)pasteboardPropertyListForType:(NSString *)type { 

    return [NSKeyedArchiver archivedDataWithRootObject:[MyClass class]]; 

} 

回答

0

這部分是不正確的:

- (id)pasteboardPropertyListForType:(NSString *)type { 
    return [NSKeyedArchiver archivedDataWithRootObject:[MyClass class]]; 
} 

它看起來像你想存檔實際MyClass類,在這裏你實際上應歸檔MyClass對象,即MyClass的特定實例,而不是類本身。此外,您應該檢查傳入的類型,以確保您提供的數據是正確的。因此,它應該是這個樣子:

- (id)pasteboardPropertyListForType:(NSString *)type { 
    if ([type isEqualToString:kUTTypeXML]) { 
     return [NSKeyedArchiver archivedDataWithRootObject:self.someInstanceOfMyClass]; 
    } 
    return nil; 
} 

最後,確保MyClass實現NSCoding協議,這樣就可以創建一個包含對象的數據歸檔。

+0

謝謝,我編輯完問題後就明白了 – Zag