我正在尝试遵循以下关于绑定的教程:
http://andrehoffmann.wordpress.com/2009/09/03/phonebook-tutorial-for-dummiesxcode-3-1-3/
但这个应用程序在运行时总是崩溃。
在IB中,我有一个NSBUtton、NSTableView、NSArrayController和一个NSOBject (名为AppController)
tableview有3个cols。广告名称、列和高度。
在AppController对象中,我有一个标题为LoadSheet的操作和三个outlets,即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;
@endappController.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时,Model Key Path下拉菜单只有self作为选项,我必须手动添加fileList,这对我来说似乎是一个危险信号。此外,他正在从plist中获取表列绑定的Model Key Path,而我,呃,正在把它们从我的臀部拉出来。我不会从plist中获取数据,而只是一个文本文件,由回车符和逗号分隔。我是否将其转储到可变字典中,以便可以建立键/值关系并将键用于绑定?
当应用程序编译后,它就可以正常运行了。然后我点击load sheet按钮,然后,旋转的海滩死亡球。我假设这个应用程序不知道我想让它做什么,也不知道我要求它做什么,然后决定就这么死掉。
在正确的方向上进行的任何推动都将受到赞赏。
发布于 2010-10-21 03:47:36
IB中的
我有一个NSBUtton、NSTableView、NSArrayController和一个NSOBject (名为AppController)
您不希望IB中的AppController实例成为AppController类的实例吗?如果已经是这样的话,我很抱歉(那么我只是理解错了您的声明)。
例如,当将arrayController绑定到appController时,Model Key Path下拉菜单只有self作为选项,我必须手动添加fileList,这对我来说似乎是一个危险信号。
我认为这很好(如果我错了,有人纠正我)。当您将arrayController绑定到appController's fileList属性时,您的arrayController将通过KVC mechanism访问fileList。因此,只要您的appController类(或者至少它的fileList属性)是符合KVC的,arrayController就能够很好地看到appController的fileList。Cocoa严重依赖于编码约定。
我也是Cocoa的新手,所以我可能会把我刚才说的一切都弄错。
https://stackoverflow.com/questions/3980298
复制相似问题