Как создать подкласс UIButton для копирования и кодирования для архивирования? - PullRequest
0 голосов
/ 25 февраля 2012

У меня есть приложение, в котором мне нужно постоянно отслеживать последнюю нажатую кнопку.Поэтому я реализовал этот метод:

-(void) lastButtonPressed: (id)sender
{
    lastButtonPressed = (UIButton *)sender;
}

Затем, когда нажимается любая кнопка, я звоню:

[self lastButtonPressed = xButton];

Работает отлично.Но теперь я работаю над архивированием всех объектов в моем приложении, когда представление исчезает или закрывается, чтобы затем разархивировать его, а UIButton не соответствует NSCopying или NSCoding.Я прочитал, что могу подкласс UIButton и определить методы, но я застрял там.

Поэтому, когда мое приложение закрывается или вид исчезает, я хочу сохранить lastButtonPressed.

Я создал новый класс под названием BIDPersistence для хранения моих архивных данных.В контроллере представления моего приложения у меня есть метод saveData, где я сохраняю свои данные.Я получаю сообщение об ошибке в последней строке, показанной ниже, потому что UIButton не соответствует.

BIDPersistence *persistence = [[BIDPersistence alloc] init];
    persistence.field1 = [NSNumber numberWithDouble:double1];
    persistence.field2 = [NSNumber numberWithDouble:double2];
    persistence.field3 = display.text;
    persistence.field4 = tapeDisplay.text;
    persistence.field5 = [NSNumber numberWithBool:continueTape];
    persistence.field6 = [NSNumber numberWithBool:newDouble];
    persistence.field7 = lastButtonPressed;

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 25 февраля 2012

Похоже, вам не нужно сохранять фактическую кнопку, просто знайте, какая из них была нажата последней.Для этого вы могли бы использовать NSUserDefaults, что хорошо для сохранения маленьких лакомых кусочков без необходимости настройки Core Data или тому подобного.Я рекомендовал бы дать каждой кнопке уникальный тег (в конструкторе интерфейсов, просто int), а затем сделать следующее:

[[NSUserDefaults standardUserDefaults] setInt:[lastButton tag] forKey:@"LastButtonPressed"];

позже вы можете получить кнопку, используя viewWithTag:.

0 голосов
/ 25 февраля 2012

Вы не можете на самом деле подкласс UIButton.Это не отдельный класс, а, как говорится, кластер классов, который UIKit выбирает на основе UIButton * + (id)buttonWithType:(UIButtonType)buttonType.

Тем не менее, он (кажется) соответствует NSCoding(просто читаю документы; я не знаю, как работает NSCoding.)

...