我想從照片庫或使用相機添加圖像到我的iPad應用程序。我使用了與iPhone相同的編碼。但應用程序崩潰。我認爲這不是從圖書館添加圖片到iPad應用程序的正確方法。如果有人知道,請幫助我。如何將照片庫或照相機中的圖像添加到我的Ipad應用程序中?
-(void)ctnPhotoSelection
{
isMyCtView = YES;
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@""
delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil
otherButtonTitles:@"Take Photo With Camera", @"Select Photo From Library", @"Cancel", nil];
actionSheet.actionSheetStyle = UIActionSheetStyleAutomatic;
actionSheet.destructiveButtonIndex = 1;
[actionSheet showInView:self.view];
[actionSheet release];
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
{
[self TakePhotoWithCamera];
}
else if (buttonIndex == 1)
{
[self SelectPhotoFromLibrary];
}
else if (buttonIndex == 2)
{
NSLog(@"cancel");
}
}
-(void) TakePhotoWithCamera
{
[self startCameraPickerFromViewController:self usingDelegate:self];
}
-(void) SelectPhotoFromLibrary
{
[self startLibraryPickerFromViewController:self usingDelegate:self];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[[picker parentViewController] dismissModalViewControllerAnimated:YES];
}
- (BOOL)startCameraPickerFromViewController:(UIViewController*)controller usingDelegate:(id<UIImagePickerControllerDelegate>)delegateObject
{
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.allowsEditing = YES;
picker.delegate = self;
[controller presentModalViewController:picker animated:YES];
[picker release];
}
return YES;
}
- (BOOL)startLibraryPickerFromViewController:(UIViewController*)controller usingDelegate:(id<UIImagePickerControllerDelegate>)delegateObject
{
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
{
UIImagePickerController *picker1 = [[UIImagePickerController alloc]init];
picker1.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
picker1.allowsEditing = YES;
picker1.delegate = self;
[controller presentModalViewController:picker1 animated:YES];
[picker1 release];
}
return YES;
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage * img = [info objectForKey:@"UIImagePickerControllerEditedImage"];
[self useImage:img];
[[picker parentViewController] dismissModalViewControllerAnimated:NO];
UINavigationController* navController = self.navigationController;
UIViewController* controller = [navController.viewControllers objectAtIndex:0];
[controller dismissModalViewControllerAnimated:NO];
}
-(void)useImage:(UIImage *)theImage
{
NSData *addImageData = UIImagePNGRepresentation(theImage);
IpadAppDelegate *appDelegate=(IpadAppDelegate*)[ [UIApplication sharedApplication] delegate];
if(isMyCtView == YES)
{
isMyCtView = NO;
appDelegate.imageCtData = addImageData;
appDelegate.isctFromDevice = YES;
appDelegate.isctnCntrl = YES;
[self.view sendSubviewToBack:myCtnView];
}
[self reloadView];
}
崩潰日誌
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'On iPad, UIImagePickerController must be presented via UIPopoverController'
*** Call stack at first throw:
(
0 CoreFoundation 0x3587a987 __exceptionPreprocess + 114
1 libobjc.A.dylib 0x34a8249d objc_exception_throw + 24
2 UIKit 0x34378317 UIImagePickerEnsureViewIsInsidePopover + 258
3 PhotoLibrary 0x3499893b -[PLLibraryView didMoveToWindow] + 86
4 UIKit 0x341bf76b -[UIView(Internal) _didMoveFromWindow:toWindow:] + 698
5 UIKit 0x341bf583 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 210
6 UIKit 0x341bf433 -[UIView(Hierarchy) _postMovedFromSuperview:] + 106
7 UIKit 0x341aa82f -[UIView(Internal) _addSubview:positioned:relativeTo:] + 678
8 UIKit 0x341aa57f -[UIView(Hierarchy) addSubview:] + 22
9 UIKit 0x341fc8a9 -[UINavigationTransitionView transition:fromView:toView:] + 416
10 UIKit 0x341fc6fd -[UINavigationTransitionView transition:toView:] + 20
11 UIKit 0x341ef8cf -[UINavigationController _startTransition:fromViewController:toViewController:] + 1274
12 UIKit 0x341ef35f -[UINavigationController _startDeferredTransitionIfNeeded] + 182
13 UIKit 0x341ef2a3 -[UINavigationController viewWillLayoutSubviews] + 14
14 UIKit 0x341ef23f -[UILayoutContainerView layoutSubviews] + 138
15 UIKit 0x341b80cf -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 26
16 CoreFoundation 0x35818bbf -[NSObject(NSObject) performSelector:withObject:] + 22
17 QuartzCore 0x31075685 -[CALayer layoutSublayers] + 120
18 QuartzCore 0x3107543d CALayerLayoutIfNeeded + 184
19 QuartzCore 0x3106f56d _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 212
20 QuartzCore 0x3106f383 _ZN2CA11Transaction6commitEv + 190
21 QuartzCore 0x31092f9d _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 52
22 CoreFoundation 0x3580ac59 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 16
23 CoreFoundation 0x3580aacd __CFRunLoopDoObservers + 412
24 CoreFoundation 0x358020cb __CFRunLoopRun + 854
25 CoreFoundation 0x35801c87 CFRunLoopRunSpecific + 230
26 CoreFoundation 0x35801b8f CFRunLoopRunInMode + 58
27 GraphicsServices 0x320c84ab GSEventRunModal + 114
28 GraphicsServices 0x320c8557 GSEventRun + 62
29 UIKit 0x341dc329 -[UIApplication _run] + 412
30 UIKit 0x341d9e93 UIApplicationMain + 670
31 IpadComicBuilder 0x00002537 main + 70
32 IpadComicBuilder 0x000024b8 start + 52
)
terminate called after throwing an instance of 'NSException'
Program received signal: 「SIGABRT」.
warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (file not found).
(gdb)
向我們展示使應用程序崩潰的代碼將有助於診斷您的問題。您聲明您認爲這不是添加圖片的正確方式,但我們不知道您使用的是什麼方式。 – IAmTimCorey 2011-06-16 14:43:28
當應用程序崩潰時,控制檯和stacktrace會說什麼? – 2011-06-16 15:07:32