Ios 在回调中更改时未保留变量 我正在制作一个C++游戏,它在某个时候想打开相机。 为此,它与表示模态视图控制器的Objective C类接口: UIImagePickerController* cameraUI = [[UIImagePickerController alloc] init]; cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera; cameraUI.mediaTypes = [[NSArray alloc] initWithObjects:(NSString*)kUTTypeImage, nil]; cameraUI.allowsEditing = YES; cameraUI.delegate = self; [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:cameraUI animated:YES];
该类公开一个状态变量,以允许游戏观看模态视图控制器的进度。 它被初始化为:Ios 在回调中更改时未保留变量 我正在制作一个C++游戏,它在某个时候想打开相机。 为此,它与表示模态视图控制器的Objective C类接口: UIImagePickerController* cameraUI = [[UIImagePickerController alloc] init]; cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera; cameraUI.mediaTypes = [[NSArray alloc] initWithObjects:(NSString*)kUTTypeImage, nil]; cameraUI.allowsEditing = YES; cameraUI.delegate = self; [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:cameraUI animated:YES];,ios,objective-c++,Ios,Objective C++,该类公开一个状态变量,以允许游戏观看模态视图控制器的进度。 它被初始化为: State = CAMERA_ACTIVITY_WORKING; 并由UIImageControllerDelegate功能更新: - (void)imagePickerControllerDidCancel: (UIImagePickerController*) picker { State = CAMERA_ACTIVITY_CANCELED; [[[[UIApplication sharedApplic
State = CAMERA_ACTIVITY_WORKING;
并由UIImageControllerDelegate功能更新:
- (void)imagePickerControllerDidCancel: (UIImagePickerController*) picker
{
State = CAMERA_ACTIVITY_CANCELED;
[[[[UIApplication sharedApplication] keyWindow] rootViewController] dismissModalViewControllerAnimated:YES];
[picker release];
}
- (void)imagePickerController: (UIImagePickerController*) picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
State = CAMERA_ACTIVITY_IMAGECAPTURED;
[[[[UIApplication sharedApplication] keyWindow] rootViewController] dismissModalViewControllerAnimated:YES];
[picker release];
}
模态视图控制器按其应该的方式打开和关闭,代理将被调用。但是,当游戏轮询状态变量时,它似乎还没有更新,并返回“照相机\活动\工作”。
我尝试过使变量不稳定,但没有效果
有人能帮忙吗
编辑:完整类源代码
h
看起来您没有使用自定义的
相机类
您创建了一个类
UIImagePickerController* cameraUI = [[UIImagePickerController alloc] init];
设置委托和其他一些项目,并将其显示给用户。但这不是Camera
类的实例,而是UIImagePickerController
的实例。我相信你想做什么
Camera* cameraUI = [[Camera alloc] init];
这将为您提供自定义UIViewController
的实现,但是还有另一个问题。您的Camera
类不是UIImagePickerController
的子类,它是UIViewController
的子类,因此它将不是UIImagePickerController
。我想你是有意的
@interface Camera : UIImagePickerController<UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@接口摄像机:UIImagePickerController
另一方面,命名约定规定只有类名应该以大写字母开头。方法名称和变量应以小写字母开头
根据评论编辑:
您的Show
方法似乎没有从任何地方调用,因此我不确定如何使用它。更重要的是,看看这个方法,我不确定它将如何使用。开头的-
表示它是一个实例方法,只能在摄影机的实例上调用,但它用于创建和显示摄影机的实例
,因此该方法需要对象的实例和实例来创建和显示新创建的对象实例。可能不是我们想要的。您可以使用+
使其成为类方法,并使用[Camera Show]
调用它,但您无法访问实例变量,因为它们不存在
目前,我看不到有任何地方创建了摄像头(在Show
之外)并可能成为活动视图控制器,因此看起来您只是在显示一个通用的UIImagePickerController
,而不是自定义类。增强它,并检查是否未在ViewDidDisplay或ViewWillDisplay方法中重置它们?因为当imagePicker关闭时,这些方法将被自动调用。我不能使状态变强,它不是引用,你是指其他方法吗?我没有实现viewDidAppear或viewWillAppearI已修改类Camera以继承UIImagePickerController,而void Show现在使用self而不是分配标准UIImagePickerController,这是对代码的改进,但不幸的是,问题仍然存在。我发现了问题。当我不小心分配了两次Camera类并检查了错误的实例时。(与您的答案类似,但它发生在代码的其他地方)
Camera* cameraUI = [[Camera alloc] init];
@interface Camera : UIImagePickerController<UIImagePickerControllerDelegate, UINavigationControllerDelegate>