0

データを sqlite データベースに保存し、そこからデータを取得する単純なアプリを作成しています。データを保存することができ、UITableView にすべてのデータを入力して、プロトタイプ セルにフィールド (名前) を表示することもできます。私が今やろうとしているのは、タップでビューを開いてすべての詳細を表示することです。そのため、入力する3つのフィールドを持つviewControllerを設定しましたが、そのセル間でデータを新しいビューに転送する方法がわかりません。

これが私のコードです:

#import "RootViewController.h"
#import "AppDelegate.h"
#import "Inserimento_Esame.h"
#import "Dettagli_Esame.h"

@interface RootViewController ()

@end

@implementation RootViewController

@synthesize nome,crediti,voto;

- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
    // Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
NSString *docsDir;
NSArray *dirPaths;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, 
YES);
docsDir = [dirPaths objectAtIndex:0];

databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: 
@"Esami.sqlite"]];
dataList = [[Data alloc] init:databasePath];

}

- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:   
(UIInterfaceOrientation)interfaceOrientation
{return YES;}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [dataList getSize];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath 
*)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle   
reuseIdentifier:CellIdentifier];
}

NSDictionary *itemAtIndex = (NSDictionary *)[dataList objectAtIndex:indexPath.row];
cell.textLabel.textColor = [UIColor whiteColor];
cell.textLabel.text = [itemAtIndex objectForKey:@"nome"];
cell.detailTextLabel.textColor = [UIColor whiteColor];
cell.detailTextLabel.text = [itemAtIndex objectForKey:@"voto"];
return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath 
*)indexPath {

[self performSegueWithIdentifier:@"DETTAGLI" sender:indexPath]; 

}





- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"DETTAGLI"])  {
    NSLog(@"Dettagli");
    Dettagli_Esame *destination = [segue destinationViewController];
    NSIndexPath * myIndexPath = [self.tableView indexPathForSelectedRow];
    NSDictionary *itemAtIndex = (NSDictionary *)[dataList objectAtIndex:myIndexPath.row];
    destination.Dett = itemAtIndex;

 // I THINK I MUST PUT HERE MY MISSING CODE

}
}
@end


EDIT3

#import "Dettagli_Esame.h"

@interface Dettagli_Esame ()

@end

@implementation Dettagli_Esame
@synthesize nome;
@synthesize crediti;
@synthesize voto;
@synthesize Dett;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}


- (void)viewDidLoad
{[super viewDidLoad];}

EDIT5-6:

-(void)viewDidAppear:(BOOL)animated{
NSString *docsDir;
NSArray *dirPaths;
NSLog(@"Dettagli Esame");

dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,   
YES);
docsDir = [dirPaths objectAtIndex:0];

databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: 
@"Esami.sqlite"]];
dataList = [[Data alloc] init:databasePath];
nome.text = [Dett objectForKey:@"nome"];
crediti.text = [Dett objectForKey:@"crediti"];
voto.text = [Dett objectForKey:@"voto"];
NSLog(@"Dettagli Esame: %@", self.Dett);
}
4

1 に答える 1

0

あなたは正しい軌道に乗っているようです。必要な情報destinationは、セルにデータを入力するために使用したものと同じです (実際には、3 つのフィールドと言いますが、それらはすべて同じ辞書にあると仮定します)。

NSDictionary *itemAtIndex = (NSDictionary *)[dataList objectAtIndex:myIndexPath.row];

NSDictionary次に、クラスにプロパティを作成して割り当てる必要があります。次のDettagli_Esameようになります。

destination.displayDictionary = itemAtIndex;

これらの行は、「不足しているコード」を示す場所に移動します。

于 2012-05-25T21:36:37.100 に答える