教師のレジストリを管理する小さなアプリを開発しようとしています。私のアプリは次のように機能します:
UIViewController
クラスを選択するために (風景のみ)を提示します。- ボタン (例: 1F) を押すと、メソッドを呼び出して
XML
、生徒の名前と姓を取得したファイルを解析します。だから私はこの名前と姓をNSArray
ofに入れましたNSDictionary
(arrayStudents[0] = dictStudents
そしてdictStudents
3 で構成されていkey: number, name and surname
ます)。 - 2 番目の例で
UIViewController
はUITableView
、画面の左側に を、右側に通常のビューを配置しました。でUITableView
生徒の名前と姓を表示し、右側に をタップして選択した生徒のテストに関するスコアを表示しUITableView
ます。
これは私viewController
のように見える方法です:
私の問題は、UITableView
. を を2 番目に接続してからtableView
、デリゲートと dataSource を 2 番目に接続しましたが、アプリはまだクラッシュしています。テーブル ビュー クラスと 2 番目のビュー コントローラーのコードをここに投稿するので、この問題を解決するのに役立ちます。IBOutlet
viewController
viewController
ここに my の接続タブが表示されますtableView
。
tableView.h
#import <UIKit/UIKit.h>
@interface tableView : UITableView <UITableViewDelegate,UITableViewDataSource>
@property (nonatomic, strong) NSMutableArray *arrayStudents;
@end
tableView.m
#import "tableView.h"
@implementation tableView
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.arrayStudents.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
cell.textLabel.text = [self.arrayStudents[indexPath.row] objectForKey:@"name"];
cell.detailTextLabel.text = [self.arrayStudents[indexPath.row] objectForKey:@"surname"];
return cell;
}
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
}
@end
detailsViewController.h
#import <UIKit/UIKit.h>
@interface DetailsViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *tableViewStudentsNameAndSurname;
@property (weak, nonatomic) IBOutlet UIView *viewDetails;
@property (weak, nonatomic) IBOutlet UILabel *labelName;
@property (weak, nonatomic) IBOutlet UILabel *labelSurname;
@property (weak, nonatomic) IBOutlet UITextField *textFieldTest1;
@property (weak, nonatomic) IBOutlet UITextField *textFieldTest2;
@property (weak, nonatomic) IBOutlet UITextField *textFieldTest3;
@property (weak, nonatomic) IBOutlet UITextField *textFieldText4;
@property (weak, nonatomic) IBOutlet UITextView *textViewValutation;
@property (weak, nonatomic) IBOutlet UILabel *labelTotalScore;
@property (nonatomic, strong) NSString *fileName;
- (IBAction)saveDataToPlistFile:(id)sender;
@end
detailsViewController.m
#import "DetailsViewController.h"
#import "ParserXML.h"
#import "tableView.h"
@interface DetailsViewController () {
ParserXML *parser;
tableView *table;
}
@end
@implementation DetailsViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
parser = [[ParserXML alloc] init];
NSLog(@"DetailsViewController: %@", self.fileName);
parser.fileName = self.fileName;
[parser parseXML];
table = [[tableView alloc] init];
table.arrayStudents = [parser.arrayStudents mutableCopy];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)saveDataToPlistFile:(id)sender {
}
@end
ParserXML.h
#import <Foundation/Foundation.h>
@interface ParserXML : NSObject <NSXMLParserDelegate>
@property (nonatomic, strong) NSMutableArray *arrayStudents;
@property (nonatomic, strong) NSDictionary *dictStudents;
@property (nonatomic, strong) NSString *fileName;
- (void) parseXML;
@end
ParserXML.m
#import "ParserXML.h"
@interface ParserXML() {
NSXMLParser *nameStudentParser;
NSString *pathXmlFile;
}
@end
@implementation ParserXML
- (id) init {
self = [super init];
if (self) {
self.arrayStudents = [[NSMutableArray alloc] init];
pathXmlFile = [[NSBundle mainBundle] pathForResource:self.fileName ofType:@"xml"];
}
return self;
}
- (void) parseXML {
NSURL *xmlUrl = [NSURL URLWithString:pathXmlFile];
NSString *host = [xmlUrl host];
if (xmlUrl == nil || host == nil) {
NSData *data = [[NSData alloc] initWithContentsOfFile:pathXmlFile];
nameStudentParser = [[NSXMLParser alloc] initWithData:data];
} else {
nameStudentParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlUrl];
}
[nameStudentParser setDelegate:self];
[nameStudentParser setShouldProcessNamespaces:NO];
[nameStudentParser setShouldReportNamespacePrefixes:NO];
[nameStudentParser setShouldResolveExternalEntities:NO];
[nameStudentParser parse];
}
- (void)parserDidStartDocument:(NSXMLParser *)parser {
NSLog(@"File trovato inizio il parsing del documento");
}
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
NSLog(@"Errore Parsing");
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
if ([elementName isEqualToString:@"students"]) {
} else if ([elementName isEqualToString:@"student"]) {
NSString *numberValue = attributeDict[@"number"];
NSString *nameValue = attributeDict[@"name"];
NSString *surnameValue = attributeDict[@"surname"];
//Inserire dizionario di array
self.dictStudents = @{@"number": numberValue,
@"name": nameValue,
@"surname" : surnameValue};
[self.arrayStudents addObject:self.dictStudents];
NSLog(@"arrayStudents dim = %d", self.arrayStudents.count);
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@"ArrayFuels = %@", self.arrayStudents);
}
@end
アプリを実行すると、Xcode は次のように言います。
[DetailsViewController tableView:numberOfRowsInSection:]: 認識されないセレクターがインスタンス 0x751da40 に送信されました
その問題を解決するのを手伝ってくれませんか? 私が間違っていることは何ですか?