gpt4 book ai didi

ios - 在 Objective C 中的委托(delegate)之间传回信息

转载 作者:行者123 更新时间:2023-11-28 19:43:57 25 4
gpt4 key购买 nike

我需要在 CameraSessionView 之间传回照片的 NSMutableArray;如何将相机拍摄的照片存储在 NSMutableArray 上,以及 TableViewController 如何将这些照片上传到 DropBox。我正在使用委托(delegate)和协议(protocol),但我尝试过的所有方法……都失败了。任何人都可以帮助我。我想我做错了一些小事。我给你看一些代码:

CameraSessionView.h

@class CameraSessionView;
@protocol CameraSessionViewDelegate <NSObject>
@optional
-(void)uploadPhotosFromCamera:(NSMutableArray*)photos;
@end

@property (nonatomic, weak) id <CameraSessionViewDelegate> delegado;

CameraSessionView.m

@property (nonatomic, strong) NSMutableArray* images;

- (void)onTapOkButton{

NSLog(@"Save photos");

if([self.delegado respondsToSelector:@selector(uploadPhotosFromCamera:)])
[self.delegado uploadPhotosFromCamera:_images];

[self onTapDismissButton];
}

PhotosTableViewController.h

@interface PhotosTableViewController : UITableViewController <CameraSessionViewDelegate>

PhotosTableViewController.m

@property (nonatomic, strong) CameraSessionView *camera;
- (void)viewDidLoad
{
_camera = [CameraSessionView new];
[_camera setDelegado:self];
}
-(void)uploadPhotosFromCamera:(NSMutableArray*)photos
{
NSLog(@"UPFC");
for(int x=0; x < [photos count];x++)
{
NSLog(@"UPFC...");

UIImage *foto = [photos objectAtIndex:x];

if (foto.size.height > 1000 || foto.size.width > 1000)
foto = [self imageWithImage:foto scaledToScale:0.15f];

DBMetadata* datos = [TablaSubidas addFile:pathElemento];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSData *data = UIImageJPEGRepresentation(foto, 1.0);
[fileManager createFileAtPath:[self photoPath:datos] contents:data attributes:nil];
[elementosTabla insertObject:datos atIndex:0];
}

[self sincFotos];
[self.tableView reloadData];
}

只希望当我按下 OK 按钮时,照片会发送回 PhotosTableViewController,然后再上传到保管箱。

onTapOKButton 上的 self.delegado 始终为 nil。

看起来很简单,但我不会运行它。如果有人可以帮助我或向我推荐任何教程,我将非常感激......

谢谢!!

最佳答案

一旦 viewDidLoad 结束,您的 CameraSessionView 实例将从内存中释放。您需要将它存储在 PhotosTableViewController 的属性中,以便保留它。

你的委托(delegate)也应该被定义为弱的,例如

@property (nonatomic,weak) id< CameraSessionViewDelegate >delegado;

然后在 PhotosTableViewController 的实现中,您需要实现 -(void)uploadPhotosFromCamera:(NSMutableArray*)photos; 方法。

此外,由于此方法被定义为 @optional,您应该在调用它之前检查委托(delegate)是否响应它。

   if([self.delegado respondsToSelector:@selector(uploadPhotosFromCamera:]){
[self.delegado uploadPhotosFromCamera:_images];
}

如果未实现委托(delegate)方法,这将防止应用程序崩溃。

关于ios - 在 Objective C 中的委托(delegate)之间传回信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33211074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com