связь между видами и модельными объектами - PullRequest
0 голосов
/ 23 ноября 2011

Каков наилучший подход для управления связью между UIView (например, UIButton) и объектом модели, к которому они относятся?

Пример (составленный): допустим, у меня есть StoreViewController с этим кодом:

- (void)viewDidLoad
{
    for(int i = 0; i < [self.storeItems count]; ++i) {
        StoreItem* item = [self.storeItems objectAtIndex:i];
        UIButton* button = [[UIButton alloc] initWithFrame:[...]];
        [button addTarget:self
                   action:@selector(itemButtonPressed:)
         forControlEvents:UIControlEventTouchDown];

        [button setTitle:item.text forState:UIControlStateNormal];

        // THIS PART!
        button.tag = i; // assuming approach 1 on the following paragraph

        [self.someView addSubView:button];
    }
    [super viewDidLoad];
}

В моем коде события как я могу вернуться к своему предмету?

- (void)itemButtonPressed:(UIButton*)button;
{
    // THIS PART!
    StoreItem* item = [self.storeItems objectAtIndex:button.tag; // assuming approach 1

    [self addToCart:item];
}

Мне уже известны некоторые подходы:

  1. Предполагая, что модель находится в списке (например, NSArray), установите для атрибута тега кнопки то же значение, что и для индекса объекта в списке.(примечание: пока что это лучший вариант, но он не будет работать, если ваши данные отсутствуют в списке)
  2. Имеют NSDictionary, который связывает кнопки для хранения элементов.(очень гибкий, но не очень приятный в обслуживании, поскольку вам нужно добавить NSDictionary к вашему StoreViewController для каждой ассоциации)
  3. Пользовательские представления могут иметь словарь userInfo.(это хорошо работает для ASIHTTPRequest, каковы недостатки использования этого в представлении?)
  4. ???

Какой подход вы считаете лучшим?

Что если это пользовательский вид и вы можете добавлять поля по своему желанию?Рекомендуется ли подход userInfo?

, связанный:

...