2010-07-20 3 views
2

У меня есть приложение CoreData Mac, для которого я пишу iOS-интерфейс. Все хорошо работает, поэтому я могу успешно читать файлы, созданные с помощью приложения Mac в версии iOS. Я борюсь с тем, как читать данные NSColor (будучи сохраненными как объект NSData в моей модели данных) в UIColor в версии приложения iOS.Создать UIColor из данных NSColor

Подводя итоги: Как взять объект NSData, содержащий архивный объект NSColor, и преобразовать его в соответствующий объект UIColor на устройстве iOS?

+3

Как отмечает Дэйв Делонг, вы не сможете разархивировать на объект NSColor на стороне IOS вещей. В этом случае вы можете захотеть сериализовать компоненты (например, NSArray) или создать пользовательский класс, который могут понять обе платформы. – warrenm

+1

Уорренм имеет правильный ответ. Вам не придется напрямую использовать 'NSColor' /' UIColor'. Вы можете создать свой собственный подкласс NSObject с компонентами RGBA и архивом, которые просто архивируют значения напрямую. –

+0

Согласовано. Для реализации этого потребуются некоторые существенные изменения в отправке кода Mac OS, поэтому я не хочу сейчас переходить на это, но я займусь этим в следующей версии и планирую версию iOS вокруг этого. Благодарю. –

ответ

1

То, что я сделал до сих пор (и это работает, но не очень), заключается в том, чтобы прочитать NSData в NSString (данные, как представляется, кодируются ASCII). Значения RGB присутствуют в NSString и с небольшим разбором можно извлечь, чтобы создать новый UIColor.

Я не уверен, что это глобальное решение или такое, которое срабатывает в моем случае, но это начало.

Очевидно, было бы лучше сериализоваться как NSArray, и я буду рассматривать это в будущем.

1

Взгляните на следующие из Core Data Programming Guide

Вы пробовали заменить NSColor с UIColor? UIColor реализует NSCoding от протоколов

// - (NSColor *)color 
- (UIColor *)color 
{ 

    [self willAccessValueForKey:@"color"]; 

    // NSColor *color = [self primitiveColor]; 
    UIColor *color = [self primitiveColor]; 

    [self didAccessValueForKey:@"color"]; 

    if (color == nil) 

    { 

     NSData *colorData = [self colorData]; 

     if (colorData != nil) 

     { 

      color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData];     

      [self setPrimitiveColor:color]; 

     } 

    } 

    return color; 

} 
+0

Насколько я могу судить, это терпит неудачу, потому что UIKit не может разблокировать и декодировать объект класса NSColor. –

+0

Хорошо. Takea посмотрите на этот вопрос SO.http: //stackoverflow.com/questions/2304882/core-data-data-model-attribute-type-for-uicolor – falconcreek

+1

Возможно, я читаю это неправильно, но ваш связанный вопрос, кажется, показывает как сериализовать и хранить UIColor. Это не моя проблема. У меня есть сериализованный NSColor, и мне нужно прочитать его в UIColor. Кроме того, UIColor не соответствует NSCoder, как указано в вашем ответе ... Спасибо за помощь. Это действительно единственное проблемное место, которое я читаю в Mac OS Coredata на iOS. До сих пор. –

Смежные вопросы