2013-05-20 72 views
0

我正在慢慢地走出我的想法,试图复制一个iPhone照片库与集合视图segueing到一个详细信息视图,我希望细节视图有分页就像照片库确实。我到目前为止的代码似乎加载,但然后有错误。我有豁免断点和断点1.1崩溃点是行self.imageView.image = img ;.除了(lldb)之外,这并没有说明日志上的错误。从集合视图继续查看详细视图问题

我想知道我是否可以借用某人的天才来指出我出错的地方,或许正确吗?我也想借此为每个图像标题对面的详细视图,但不知道如何/在哪里添加此

我的代码是:

#import "MarbleCollectionViewController.h" 
#import "DetailViewController.h" 

@interface MarbleCollectionViewController() { 

    NSArray *marbleImages; 
} 

@end 

@implementation MarbleCollectionViewController 

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

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    marbleImages = [NSArray arrayWithObjects:@"arabescato.jpg", 
        @"bianco-carrara.jpg", 
        @"botticino-classico2.jpg", 
        @"Calacatta_Oro.jpg", 
        @"crema-marfil-3.jpg", 
        @"crema-valencia.jpg", 
        @"emperador-dark.jpg", 
        @"jura-beige.jpg", 
        @"nero-marquina.jpg", 
        @"perlato-olympo.jpg", 
        @"rojo-alicante_marbleGRP1.jpg", nil]; 
} 

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 
    return marbleImages.count; 
} 


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString *identifier = @"Cell"; 

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; 

    UIImageView *marbleImageView = (UIImageView *)[cell viewWithTag:100]; 
    marbleImageView.image = [UIImage imageNamed:[marbleImages objectAtIndex:indexPath.row]]; 

    return cell; 
} 

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"detailView" sender:collectionView]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"detailView"]) { 
     DetailViewController *destViewController = segue.destinationViewController; 
     NSIndexPath *indexPath = [[self.collectionView indexPathsForSelectedItems] objectAtIndex:0]; 
     destViewController.img = [marbleImages objectAtIndex:indexPath.row]; 
     [self.collectionView deselectItemAtIndexPath:indexPath animated:NO]; 
    } 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

和详细信息视图是:

#import "DetailViewController.h" 

@interface DetailViewController() 

@end 

@implementation DetailViewController 

@synthesize imageView, img; 

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

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.imageView.image = img; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

非常感谢您的任何帮助,您可以提供的是为了我真的很感激。

+0

你没有说你正在得到哪个错误 – meda

+0

我有豁免断点和断点1.1崩溃点是行self.imageView.image = img ;.这并没有说明日志上的错误,除了(lldb) – David

回答

1

你传递一个路径的图像,而不是像你DetailViewController,让您的viewDidLoad必须是:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.imageView.image = [UIImage imageNamed:img]; 
} 

这应该是命名一个很好的教训 - 不叫什么一个图像(或img),如果它不是一个,它只是使混乱。称之为更像imageName或imagePath的描述性内容。

+0

感谢您的帮助到目前为止!尽管如此,仍然没有工作,说 - 不兼容的指针类型发送'UIImage * __强'参数类型'NSString *' – David

+0

最后也得到一个错误报告 - ***由于未捕获异常'NSRangeException',原因:'终止应用程序' *** - [__ NSArrayI objectAtIndex:]:索引0超出空数组的边界' – David

+0

@David,img如何在DetailViewController中声明?它应该被声明为一个字符串。范围异常错误是我想的另一个问题。该错误发生在哪条线上? – rdelmar