gpt4 book ai didi

objective-c - 在另一个方法中设置后,numberOfRowsInTableView 中的变量变为 nil

转载 作者:行者123 更新时间:2023-12-03 17:50:56 26 4
gpt4 key购买 nike

我的类(class)是这样的:

@interface ApplicantPickerController : AppPage <NSTableViewDataSource, NSTableViewDelegate> 
{
School *school;
__weak IBOutlet NSTableView *tableView;
NSMutableArray *familyList;
__weak IBOutlet NSProgressIndicator *progressIndicator;
}
- (IBAction)alphabetButtonPressed:(id)sender;
@end

alphabetButtonPressed 方法中,我从 Web 服务获取一个 json 数组并将其分配给 familyList。完成此操作后,我执行 [tableView reload];当控件传递到 - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView 方法时,familyList 变为 nil。为什么会发生这种情况以及如何解决它?

我在这个项目中使用 ARC。Cocoa/Objective-C 新手在这里。任何帮助将非常感激。谢谢!

<小时/>

更新 - 这是该类的实现:

@interface ApplicantPickerController ()

@end

@implementation ApplicantPickerController

- (IBAction)alphabetButtonPressed:(id)sender {
[progressIndicator startAnimation:self];

NSString * addy = [[NSString alloc] initWithFormat:@"%@.php?function=applicant_lookup&schoolID=%@&alpha=%@&currentYear=%@&format=json", BASE_URL_SCHOOL, school->recordID, [sender title], school->CurrentYear];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:addy]];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if(data) {
//NSString * resp = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSError *error = nil;
NSObject *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
if([json isKindOfClass:[NSDictionary class]])
{
familyList = nil;
[tableView reloadData];
}
else if ([json isKindOfClass:[NSArray class]])
{
familyList = [[NSMutableArray alloc] init];
[familyList addObjectsFromArray:(NSArray*)json];
//[_familyList retain];
[tableView reloadData];
}

[progressIndicator stopAnimation:self];
}
}];
}

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return [familyList count];
}

- (id)initWithMainView:(NSView *)_theView AndMainController:(NSViewController *)_theViewController AndNibName:(NSString *)nibName AndArgs:(NSArray *)_args
{
self = [super initWithMainView:_theView AndMainController:_theViewController AndNibName:nibName AndArgs:_args];
school = [args objectAtIndex:0];
return self;
}

@end

最佳答案

我不知道我是否发现了苹果的错误,但以下是我解决这个问题的方法。

我在 UI 构建器中设置 NSTableView 委托(delegate)和数据源(通过右键单击并用鼠标建立连接)。由于某种原因,如果我在代码中设置 delegatedataSource (特别是在 awakeFromNib 方法中),问题就会得到解决。

- (void)awakeFromNib {
tableView.delegate = self;
tableView.dataSource = self;
}

关于objective-c - 在另一个方法中设置后,numberOfRowsInTableView 中的变量变为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26610296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com