Проблемы с NSTableView - PullRequest
       33

Проблемы с NSTableView

0 голосов
/ 20 октября 2010

Я пытаюсь следовать этому руководству по связыванию:

http://andrehoffmann.wordpress.com/2009/09/03/phonebook-tutorial-for-dummiesxcode-3-1-3/

, но приложение продолжает падать во время выполнения.

В IB у меня есть NSBUtton, NSTableView, NSArrayController и NSOBject (с именем AppController)

В табличном представлении есть 3 столбца.Имя объявления, столбец и высота.

В объекте AppController у меня есть действие под названием LoadSheet и три выхода, btnLoadSheet, tblAdList и arrayController

В привязках arrayController я устанавливаю его в AppController и задаю ключ моделиПуть к fileList, который является NSMutableArray, куда я буду передавать данные моей таблицы.

В каждой ячейке таблицы я связываю их с arrayController и задаю путь к ключу модели. Я устанавливаю для них соответственно adName, adcol, adHeight.

appController.h выглядит следующим образом:

#import <Cocoa/Cocoa.h>

@interface AppController : NSWindowController {

    IBOutlet NSArrayController *arrayController;
    IBOutlet NSButton *btnAdRunner;
    IBOutlet NSButton *btnAddItem;
    IBOutlet NSButton *btnDelteItem;
    IBOutlet NSButton *btnLoadSheet;
    IBOutlet NSButton *btnQuit;
    IBOutlet NSTableView *tblAdList;

    NSMutableArray* fileList; 
}

@property (copy) NSMutableArray* fileList;

- (IBAction)AdRun:(id)sender;
- (IBAction)AddItem:(id)sender;
- (IBAction)DeleteItem:(id)sender;
- (IBAction)LoadSheet:(id)sender;
- (IBAction)QuitApp:(id)sender;
@end

appController.m:

#import "AppController.h"

@implementation AppController

@synthesize fileList; 

- (IBAction)LoadSheet:(id)sender {

    //define the ad array (this will be pulled from the run sheet
    fileList = [NSMutableArray arrayWithObjects:@"Ad1, 1, 2.5", @"Ad2, 1, 3", @"Ad3, 2, 1", @"Ad4, 1, 2.5", @"Ad5, 2, 4", nil];

    int i=0;
    for(NSString* thisdatarow in fileList) {

        //increase i
        i++;

        //make ad id
        NSString* adID = [NSString stringWithFormat:@"ad%d", i];

        //convert add data to an array from a string
        NSArray* templist = [thisdatarow componentsSeparatedByString:@","];

        //get ad items
        NSString* adname = [templist objectAtIndex: 0];
        NSString* adcols = [templist objectAtIndex:1];
        NSString* adheight = [templist objectAtIndex:2];

        //declare an array
        NSMutableArray* temparray = [[NSMutableArray alloc] initWithObjects:  adname, adcols, adheight];

        //dump temp array into arrayController
        [arrayController addObject:temparray];

    }

}

@end

Я понимаю, что происходит на большом изображении, но я потеряно том, как собрать все это вместе.Я также не уверен, правильно ли я все это выстроил.Например, при привязке arrayController к appController раскрывающийся список «Путь к ключу модели» содержал только «self» в качестве опции, мне пришлось вручную добавлять fileList, что мне показалось красным флагом.Кроме того, он получает путь ключа модели для связывания столбцов таблицы из списка, я их вытаскиваю из своей задницы.Я не собираюсь получать данные из списка, просто текстовый файл, разделенный символами возврата каретки и запятыми.Должен ли я сбросить это в изменяемый словарь, чтобы я мог установить отношение ключ / значение и использовать ключи для моей привязки?

Когда приложение компилируется, оно выходит нормально.Затем я нажимаю кнопку загрузки листа и нажимаю кнопку «пляжный мяч смерти».Я предполагаю, что приложение не имеет ни малейшего представления о том, что я хочу, чтобы оно делало или решало то, что я прошу, и решает просто умереть.

Любые толчки в правильном направлении приветствуются.

1 Ответ

2 голосов
/ 20 октября 2010

В IB у меня есть NSBUtton, NSTableView, NSArrayController и NSOBject (с именем AppController)

Не хотите, чтобы ваш экземпляр AppController в IB был экземпляром вашего класса AppController?Приношу свои извинения, если это уже так (тогда я просто неправильно понимаю ваше утверждение).

Например, при привязке arrayController к appController раскрывающийся список «Путь к ключу модели» содержал только «self» в качестве опции, мне пришлось вручную добавлять fileList, что мне показалось красным флагом.

Я думаю, что это нормально (кто-то поправит меня, если я ошибаюсь).Когда вы привязываете arrayController к атрибуту appController fileList , ваш arrayController будет затем обращаться к fileList путем механизм КВК .Таким образом, пока ваш appController класс (или, по крайней мере, его атрибут fileList ) является KVC-совместимым, arrayController будет в состоянии видеть fileList appController просто отлично.Какао в значительной степени зависит от правил кодирования.

Я тоже новичок в Какао, поэтому могу ошибаться во всем, что только что сказал.

...