所以我正在为我的应用创建一个设置视图(SettingsViewController),该视图包含5个开关。我希望完成以下任务:
如果启用此开关,则将TableView过滤为仅显示包含“关节炎”的项目。如果开关关闭,则显示所有项目。
注意:TableView位于另一个视图(ViewController)。
现在即使我已经将ViewController.h导入到我的SettingsViewController.m文件中,它告诉我StrainTableView未被识别。知道为什么?请参阅下面的代码(您可以忽略PickerView引用)。
SettingsViewController.h
@interface SettingsViewController : UIViewController {
IBOutlet UISwitch *ArthritisSwitch;
IBOutlet UIView *CancerSwitch;
IBOutlet UISwitch *HIVSwitch;
IBOutlet UISwitch *InsomSwitch;
IBOutlet UISwitch *MigSwitch;
IBOutlet UILabel *mylabel;
NSArray *arthritisResults;
NSArray *Strains;
}
-(IBAction)switchtheswitch:(id)sender;
@property (nonatomic, retain) NSArray *arthritisResults;
@end
SettingsViewController.m
#import "SettingsViewController.h"
#import "ViewController.h"
@interface SettingsViewController ()
@end
@implementation SettingsViewController
@synthesize arthritisResults;
-(IBAction)switchtheswitch:(id)sender; {
if (ArthritisSwitch.on) {
NSPredicate *ailmentPredicate = [NSPredicate predicateWithFormat:@"title ==[c] 'Arthritis'"];
arthritisResults = [Strains filteredArrayUsingPredicate:ailmentPredicate];
// Pass any objects to the view controller here, like...
[StrainTableView setSearchResults: [arthritisResults copy]];
NSLog(@"%@", arthritisResults);
}
else {
[Strains count];
}
}
ViewController.h
#import "PickerViewController.h"
@interface ViewController : UIViewController <PickerViewControllerDelegate, UITableViewDataSource,UITableViewDelegate>
{
NSArray *searchResults;
// NSArray *Strains;
NSMutableData *data;
NSMutableArray *dataArray;
NSArray *Strains;
}
@property (nonatomic, strong) NSMutableArray * favoritesArray;
@property (nonatomic, retain) NSArray *searchResults;
@property (strong, nonatomic) IBOutlet UITableView *StrainTableView;
@end
答案 0 :(得分:0)
只是导入一个类不允许您使用该类的属性。您需要获取ViewController类的实例(例如,我们将其称为vc),然后像这样使用它:
[vc.StrainTableView setSearchResults: [arthritisResults copy]];
如何制作ViewController实例取决于应用的结构。你可能不只是想分配init一个,而是引用你已经拥有的一个。
顺便说一下,如果你遵守使用小写字母来启动属性和方法(以及类的大写)的命名约定,你的代码将更容易阅读和理解。