2013-12-21 36 views
1

我有一个UITableview,我已经从数据库中填充数据,我知道要将数据发送到另一个视图(detailViewController),但是我无法让它工作,现在我通过- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {方法发送数据。我有两个类UITableview类和它们下面的详细类。我也有一个保存数据库对象的NSObject类。请检查出来,这是我的代码:发送数据到detailViewController不工作?

的UITableView类代码:

Header File 

#import <UIKit/UIKit.h> 
#import <sqlite3.h> 

@interface ExerciseViewController : UITableViewController { 
NSMutableArray *theauthors; 
sqlite3 * db; 

} 
@property(nonatomic,retain) NSMutableArray *theauthors; 

-(NSMutableArray *) authorList; 

@end 

实现文件

#import "ExerciseViewController.h" 
#import "sqlColumns.h" 
#import <sqlite3.h> 
#import "UIColor+FlatUI.h" 
#import "ExerciseDetailViewController.h" 

@interface ExerciseViewController() 
@end 
@implementation ExerciseViewController 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

self.title = @"Abdominal"; 

[self authorList]; 

} 


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 

return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 

return [self.theauthors count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"exerciseCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 


sqlColumns *author = [self.theauthors objectAtIndex:indexPath.row]; 

UILabel *exerciseName = (UILabel *)[cell viewWithTag:101]; 
exerciseName.text = author.Name; 

UILabel *equipment = (UILabel *)[cell viewWithTag:102]; 
equipment.text = author.Equipment; 
NSString *string = author.Equipment; 
NSString *trimmedString = [string stringByTrimmingCharactersInSet: 
          [NSCharacterSet whitespaceCharacterSet]]; 
if ([trimmedString isEqualToString:@"null"]) { 
    equipment.text = @"No Equipment"; 
} 

UILabel *difficulty = (UILabel *)[cell viewWithTag:103]; 
difficulty.text = author.Difficulty; 

if ([difficulty.text isEqualToString:@"Easy"]) { 
    difficulty.textColor = [UIColor emerlandColor]; 
} 
if ([difficulty.text isEqualToString:@"Intermediate"]) { 
    difficulty.textColor = [UIColor belizeHoleColor]; 
} 
if ([difficulty.text isEqualToString:@"Hard"]) { 
    difficulty.textColor = [UIColor alizarinColor]; 
} 
if ([difficulty.text isEqualToString:@"Very Hard"]) { 
    difficulty.textColor = [UIColor alizarinColor]; 
} 

UIImageView *cellImageView = (UIImageView *)[cell viewWithTag:100]; 
cellImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@",author.File]]; 

UIView *bgColorView = [[UIView alloc] init]; 
bgColorView.backgroundColor = [UIColor cloudsColor]; 
bgColorView.layer.masksToBounds = YES; 
[cell setSelectedBackgroundView:bgColorView]; 



return cell; 
} 

-(NSMutableArray *) authorList{ 
_theauthors = [[NSMutableArray alloc] initWithCapacity:10]; 
@try { 
    NSFileManager *fileMgr = [NSFileManager defaultManager]; 
    NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"StayhealthyExercises.sqlite"]; 
    BOOL success = [fileMgr fileExistsAtPath:dbPath]; 
    if(!success) 
    { 
     NSLog(@"Cannot locate database file '%@'.", dbPath); 
    } 
    if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK)) 
    { 
     NSLog(@"An error has occured: %s", sqlite3_errmsg(db)); 

    } 
    const char *query = "SELECT * FROM strengthexercises WHERE primarymuscle LIKE '%abdominal%'"; 
    const char *sql = query; 

    sqlite3_stmt *sqlStatement; 
    if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK) 
    { 
     NSLog(@"Problem with prepare statement: %s", sqlite3_errmsg(db)); 
    }else{ 

     while (sqlite3_step(sqlStatement)==SQLITE_ROW) { 
      sqlColumns * author = [[sqlColumns alloc] init]; 
      author.Name = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,1)]; 
      author.Muscle = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,2)]; 
      author.Description = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 3)]; 
      author.File= [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 4)]; 
      author.Sets= [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 5)]; 
      author.Reps= [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 6)]; 
      author.Equipment= [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 7)]; 
      author.PrimaryMuscle= [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 8)]; 
      author.SecondaryMuscle= [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 9)]; 
      author.Difficulty= [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 10)]; 

      [_theauthors addObject:author]; 
     } 
    } 
    sqlite3_finalize(sqlStatement); 
} 
@catch (NSException *exception) { 
    NSLog(@"Problem with prepare statement: %s", sqlite3_errmsg(db)); 
} 
@finally { 
    sqlite3_close(db); 

    return _theauthors; 
} 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
[tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

if ([segue.identifier isEqualToString:@"detail"]) { 
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
    sqlColumns *author = [self.theauthors objectAtIndex:indexPath.row]; 
    ExerciseDetailViewController *destViewController = segue.destinationViewController; 
    destViewController.exerciseImage.image = [UIImage imageNamed:author.File]; 
    destViewController.descriptionLabel.text = author.Description; 

     } 

} 


@end 

现在DetailViewController

头文件

#import <UIKit/UIKit.h> 
#import "sqlColumns.h" 

@interface ExerciseDetailViewController : UIViewController 
@property (weak, nonatomic) IBOutlet UIImageView *exerciseImage; 
@property (weak, nonatomic) IBOutlet UILabel *descriptionLabel; 
@property (nonatomic, strong) sqlColumns *author; 

@end 

执行文件

#import "ExerciseDetailViewController.h" 
#import "ExerciseViewController.h" 

@interface ExerciseDetailViewController() 

@end 

@implementation ExerciseDetailViewController 
@synthesize exerciseImage,descriptionLabel,author; 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

descriptionLabel.text = author.Description; 
NSLog(@"%@",author.Description); 
} 


@end 

必须是一个小错误,任何帮助将不胜感激!

回答

2

我认为问题在于你的零售店是零。您只能在调用viewDidLoad之后设置文本和图像。

尝试保存您的信息在其他属性和viewDidLoad被调用后分配此信息到您的标签和图像视图。

在您的赛格瑞准备:

destViewController.image = [UIImage imageNamed:author.File]; 
destViewController.text = author.Description; 

在你的头添加这些属性:

@property (strong, nonatomic) UIImage *image; 
@property (strong, nonatomic) NSString *text; 

然后在您的viewDidLoad:

exerciseImage.image = self.image; 
descriptionLabel.text = self.text; 
+0

请举个例子? –

+0

明白了,谢谢。 –