Я пытаюсь разработать крошечное приложение для управления реестром для учителя. Мое приложение работает так:UITableView в UIViewController на iPad
- Представляю
UIViewController
(только пейзаж), чтобы выбрать класс. - Когда я нажимаю кнопку (например: 1F), я вызываю метод для разбора файла
XML
, в котором я получил имя и фамилию студентов. Поэтому я помещал это имя и фамилию вNSArray
изNSDictionary
(arrayStudents[0] = dictStudents
иdictStudents
составлен 3key: number, name and surname
). - Во втором
UIViewController
Я положилUITableView
в левой части экрана и нормальный вид справа. ВUITableView
я хочу иметь имя и фамилию студентов, а справа я хочу показать оценку о тестировании студента, нажав наUITableView
.
Это как мой viewController
выглядит следующим образом:
Моя проблема заключается в том, чтобы заполнить UITableView
. Я подключил tableView
с IBOutlet
к моему второму viewController
, а затем подключил делегат и источник данных ко второму viewController
, но приложение все еще терпит крах. Я выложу здесь код класса table view и второго контроллера, поэтому вы можете помочь мне исправить эту проблему.
Здесь вы можете увидеть вкладку подключения моего 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
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.м
#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
Можете ли вы помочь мне исправить проблема? Что я делаю неправильно?
Так что я должен использовать методы myViewView.m в DetailsViewcontroller.m? – lucgian841
Это работает !!!! Большое спасибо! – lucgian841