带有按钮和错误处理的照片浏览器

Posted

技术标签:

【中文标题】带有按钮和错误处理的照片浏览器【英文标题】:MWPhotoBrowser with button and error handeling 【发布时间】:2012-11-25 23:39:20 【问题描述】:

我正在尝试制作一个使用照片浏览器的应用 决定使用 MWPhotoBrowser。

这是代码,但我似乎无法使其工作:

ViewController.h

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

@interface ViewController : UIViewController<MWPhotoBrowserDelegate> 
    NSArray *_photos;
    UISegmentedControl *_segmentedControl;

@property (nonatomic, retain) NSArray *photos;
- (IBAction)billede:(id)sender;

@end

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize photos = _photos;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        UIBarButtonItem *item = [[[UIBarButtonItem alloc] initWithCustomView:_segmentedControl] autorelease];
        self.navigationItem.rightBarButtonItem = item;
        self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil] autorelease];
    
    return self;



- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

- (IBAction)billede:(id)sender 

    //show your photo whit url
    NSMutableArray *photos = [[NSMutableArray alloc] init];
    MWPhoto *photo;
    
    photo = [MWPhoto photoWithFilePath:[[NSBundle mainBundle] pathForResource:@"photo2l" ofType:@"jpg"]];
    photo.caption = @"The London Eye is a giant Ferris wheel situated on the banks of the River Thames, in London, England.";
    [photos addObject:photo];
    

    self.photos = photos;

    // Create browser
    MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithDelegate:self];
    browser.displayActionButton = YES;

    //browser.wantsFullScreenLayout = NO;
    //[browser setInitialPageIndex:2];

    // Show
    if (_segmentedControl.selectedSegmentIndex == 0) 
        // Push
        [self.navigationController pushViewController:browser animated:YES];
     else 
        // Modal
        UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:browser];
        nc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentModalViewController:nc animated:YES];
        [nc release];
    






#pragma mark - MWPhotoBrowserDelegate

- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser 

    return _photos.count;





- (MWPhoto *)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:   (NSUInteger)index 

    if (index < _photos.count)

        return [_photos objectAtIndex:index];

    return nil;



@end

我用 ARC 和 wothout ARC 都试过了

没有 ARC 我得到 3 个错误:

架构 i386 的未定义符号: “_OBJC_CLASS_$_MWPhoto”,引用自: ViewController.o 中的 objc-class-ref “_OBJC_CLASS_$_MWPhotoBrowser”,引用自: ViewController.o 中的 objc-class-ref ld:未找到体系结构 i386 的符号 clang: error: 链接器命令失败,退出代码为 1(使用 -v 查看调用)

使用 ARC 我得到 2 个错误

问题 1 http://i.imgur.com/pT7qW.png

问题 2 http://i.imgur.com/E0X1m.png

我还没有在这里完成,但我希望它被包裹在一个按钮中,这样我就可以单击它并在 MWPhotoBrowser 中显示图像

编辑

我已经升级了我的代码,从我的文件中删除了 ARC,现在我已经正确设置了目标。 它现在会编译,但每次我尝试单击按钮时:“billede”我得到:

    2012-11-26 23:32:10.955 MWPhotoBrowserTest[10405:c07] -[ViewController galleri:]: unrecognized selector sent to instance 0x947fb20
2012-11-26 23:32:10.957 MWPhotoBrowserTest[10405:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController galleri:]: unrecognized selector sent to instance 0x947fb20'
*** First throw call stack:
(0x1d34012 0x14e9e7e 0x1dbf4bd 0x1d23bbc 0x1d2394e 0x14fd705 0x434920 0x4348b8 0x4f5671 0x4f5bcf 0x4f4d38 0x46433f 0x464552 0x4423aa 0x433cf8 0x1f6ddf9 0x1f6dad0 0x1ca9bf5 0x1ca9962 0x1cdabb6 0x1cd9f44 0x1cd9e1b 0x1f6c7e3 0x1f6c668 0x43165c 0x1e2d 0x1d55)
libc++abi.dylib: terminate called throwing an exception
(lldb) 

【问题讨论】:

您以哪种方式将此库添加到您的项目中?作为库还是包含源代码? 我包括来源 您记得添加 MWPhoto.m 和 MWPhotoBrowser.m 吗?是否为这两个文件正确设置了 Target Membership? 你的意思是我必须添加 MWPhoto.m 和 MWPhotoBrowser.m?我现在打开它!它在未使用 ARC 的测试文件中(我认为它已针对使用 ARC 进行了优化?)但是当我单击按钮时出现错误并且应用程序冻结.. 修复了我的代码和目标成员资格,现在我只需要在单击时获取按钮即可显示我的图像。 【参考方案1】:

附件一: 您不能将对象添加到 NSArray,请改用 NSMutableArray。

附件2: UIView 没有“reloadData”方法,但例如 UITableView 有。

【讨论】:

Paul: 1 我一拿到我的电脑就试试! 2. 尝试 UITableView 时出现错误【参考方案2】:

实际上解决了这个问题。 我苦苦挣扎了4天,终于搞定了。 我通读了https://github.com/mwaterfall/MWPhotoBrowser#method-1-static-library 并理解了它,最后但我遇到了用户标题搜索路径的问题。 我终于明白了,将 MWPhotoBrowser 文件夹导入我的 MWPhotoBrowser“项目”文件夹,然后将用户标题搜索路径设置为“..”而不是“../”,因为“../”给了我“ ../../

希望这可以帮助任何可能遇到与我相同问题的人!

顺便说一句,谢谢大家的帮助! :-)

【讨论】:

你设置为递归搜索了吗?我发现自己也在为此苦苦挣扎,但只有当我尝试归档我的项目时才会发生这种情况......

以上是关于带有按钮和错误处理的照片浏览器的主要内容,如果未能解决你的问题,请参考以下文章

php错误处理

PHP基础PHP教程(错误处理异常处理)

未处理的 GraphQL 订阅错误

删除功能区按钮但仍然出现链接器错误

PHP-异常-1

PHP的错误处理