我是iPhone编程新手。使用下面的代码我在缩略图中显示图像。在那里我们可以选择多个图像,我们也可以选择和取消选择图像。选择一些图像后,它会在下一个视图中显示所选图像。为此,我使用了另一种方法。但问题是它在缩略图中显示图像,但如果我选择任何图像意味着它显示一些异常。任何人都可以告诉我如何解决这个问题吗?
- (void)viewDidLoad
{
self.title=@"All Images";
mImageSelected=[[NSMutableArray alloc]init];
self.view.backgroundColor=[UIColor whiteColor];
mFirst=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"one.jpg"]];
mFirst.frame=CGRectMake(10, 10, 60, 50);
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(actionHandleTapOnImageView:)];
mFirst.userInteractionEnabled = YES;
[mFirst addGestureRecognizer:singleTap];
[self.view addSubview:mFirst];
msSec=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"two.jpg"]];
msSec.frame=CGRectMake(80, 10, 60, 50);
UITapGestureRecognizer *secsingleTap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(actionHandleTapOnImageView:)];
msSec.userInteractionEnabled = YES;
[msSec addGestureRecognizer:secsingleTap];
[self.view addSubview:msSec];
mThird=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"three.jpg"]];
mThird.frame=CGRectMake(150, 10, 60, 50);
UITapGestureRecognizer *trdsingleTap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(actionHandleTapOnImageView:)];
mThird.userInteractionEnabled = YES;
[mThird addGestureRecognizer:trdsingleTap];
[self.view addSubview:mThird];
m4th=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"four.jpg"]];
m4th.frame=CGRectMake(220, 10, 60, 50);
UITapGestureRecognizer *frthsingleTap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(actionHandleTapOnImageView:)];
m4th.userInteractionEnabled = YES;
[m4th addGestureRecognizer:frthsingleTap];
[self.view addSubview:m4th];
m5th=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"five.jpg"]];
m5th.frame=CGRectMake(10, 70, 60, 50);
UITapGestureRecognizer *fifthsingleTap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(actionHandleTapOnImageView:)];
m5th.userInteractionEnabled = YES;
[m5th addGestureRecognizer:fifthsingleTap];
[self.view addSubview:m5th];
UIButton *theSshowButton=[[UIButton alloc]init];
theSshowButton.frame=CGRectMake(100, 300, 100, 30);
theSshowButton.layer.borderWidth=2;
theSshowButton.layer.borderColor=[UIColor purpleColor].CGColor;
theSshowButton.layer.cornerRadius=5;
theSshowButton.backgroundColor=[UIColor greenColor];
[theSshowButton setTitle:@"Show" forState:UIControlStateNormal];
[theSshowButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[theSshowButton addTarget:self action:@selector(show) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:theSshowButton];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(void)actionHandleTapOnImageView:(UITapGestureRecognizer *) in_ImageSenderTap
{
if (in_ImageSenderTap.view.tag ==0 )
{
mTick=[[UIImageView alloc]initWithImage:[UIImage imageNamed: @"mark.jpg"]];
mTick.frame=CGRectMake(0, 0, in_ImageSenderTap.view.frame.size.width*0.3, in_ImageSenderTap.view.frame.size.height*0.4);
[mImageSelected addObject:[in_ImageSenderTap.view accessibilityIdentifier]];
[in_ImageSenderTap.view addSubview:mTick];
in_ImageSenderTap.view.tag=1;
}
else
{
for (UIView *subviews in in_ImageSenderTap.view.subviews)
{
UIImageView *theSubview=(UIImageView*)subviews;
[theSubview removeFromSuperview];
[mImageSelected removeObjectIdenticalTo:[in_ImageSenderTap.view accessibilityIdentifier]];
}
in_ImageSenderTap.view.tag=0;
}
}
就像这样展示了一些Expect。
2013-03-01 12:01:21.332 ImageStuf[588:11303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
*** First throw call stack:
(0x159a012 0x12a7e7e 0x154db6a 0x154da20 0x37e0 0x4b685a 0x4b599b 0x4b70df 0x4b9d2d 0x4b9cac 0x4b1a28 0x21e972 0x21ee53 0x1fcd4a 0x1ee698 0x25fcdf9 0x25fcad0 0x150fbf5 0x150f962 0x1540bb6 0x153ff44 0x153fe1b 0x25fb7e3 0x25fb668 0x1ebffc 0x1cd2 0x1c05 0x1)
libc++abi.dylib: terminate called throwing an exception
(lldb)
如果我在此方法中注释下面的代码
-(void)actionHandleTapOnImageView:(UITapGestureRecognizer *) in_ImageSenderTap
意味着它的工作正常,但不能将图像存储在数组中。任何人都可以告诉我如何解决这个问题
谢谢
阿斯拉姆
[mImageSelected addObject:[in_ImageSenderTap.view accessibilityIdentifier]];
答案 0 :(得分:0)
对于多项选择,您可以使用PSTCollectionView。这样一个很棒的库也可以在iOS 5中作为gridView工作,在iOS6上面它可以作为UICollectionView使用。
一切顺利!!!
答案 1 :(得分:0)
首先,为什么要在数组中插入accessibilityIdentifier
,当你可以改为添加缩略图时呢?
这将确保您不添加nil
,这是产生崩溃的原因。您没有在缩略图上设置accessibilityIdentifier
。
其次,为什么要创建UITapGestureRecognizer
的5个实例?只需在addGestureRecognizer:
时使用相同的实例,就不需要5个版本。
答案 2 :(得分:0)
您尝试将nil插入NSArray,因此它引发了异常。你应该检查要插入的元素。
我认为您可以使用ALAssetLibrary来选择多张图片:
[_assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
[self.groupArray addObject:group];
}
} failureBlock:^(NSError *error) {
NSLog(@"Group not found!\n");
}];
- (void)getImages
{
if (!self.assetsArray) {
_assetsArray = [[NSMutableArray alloc] init];
}
if (!self.assetsLibrary) {
_assetsLibrary = [[ALAssetsLibrary alloc] init];
}
@autoreleasepool {
[self.assetsGroup enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result) {
TTAsset *ttAsset = [[TTAsset alloc] initWithAsset:result];
[self.assetsArray addObject:ttAsset];
[ttAsset release], ttAsset = nil;
}
}];
}
[self.tableView reloadData];
}
之后,您可以使用ALAsset的缩略图属性。
ELCImagePickerController是一个很好的起点。