【发布时间】:2013-12-03 20:45:45
【问题描述】:
我正在构建一个 cordova 应用程序(主要用于 IOS 和 Android),用户可以在其中拍摄图像、重新拍摄(等)图像并将其保存在本地。
我目前正在努力使用cordova cameraPlugin。所以,这里是问题的简短描述。
当用户拍摄图像时,它会在本地保存在应用程序临时文件夹中,并且用户可以在 UIWebView 中查看。重新拍摄时,图像将从临时文件夹中删除,并且不再可用(在 RAM 和本地 FS 中)。 只要用户不重新拍摄图像 2 次或更多次,它就可以工作,如果他这样做而不是最后一张图像,则将在 WebView 中引用/渲染第一张图像。重新打开应用后,图片显示正确。
一个例子:
- 用户拍摄第一张图像。 ==> cdv_photo_001.png
- 第二个。 ==> cdv_photo_002.png 和第一个将被删除(这似乎工作正常)
- 第三个。 ==> cdv_photo_001.png 和第二张图片将被删除。
第三张图片看起来与已删除的第一张图片相同。第三张之后的每张图片都会发生这种情况。 重启应用后就可以正常使用了
我已经尝试禁用App-Cache,在更新图像之前删除应用缓存,刷新页面并在线寻找答案。
我在打开相机 UI 时遇到错误,但我也找不到解决方案。
对尚未渲染的视图进行快照会导致快照为空。确保您的视图之前至少渲染过一次 屏幕更新后的快照或快照。
摄像头调用代码:
function getPhoto() {
navigator.camera.getPicture(getPhotoOnSuccess, getPhotoOnFail, {
quality: 25,
destinationType: Camera.DestinationType.FILE_URL,
correctOrientation: true,
encodingType: Camera.EncodingType.PNG
});
}
在 getPhotoOnSuccess 中,我基本上是将图像路径保存到数据库并使用 jQuery 将其附加到视图中。
以及删除图像的代码:(旁注我是 Objective C 的新手)
- (void) deleteImageByPath:(NSString *)imagePath withSelector:(SEL)selector{
NSError *error = nil;
NSFileManager *mgr = [NSFileManager defaultManager];
NSString *tempFolder = NSTemporaryDirectory();
if([mgr removeItemAtPath: imagePath error:&error] == NO) {
NSLog(@"File deleted");
}
//The files can be edited as well, so there can be two files in different directories
if(error != nil){
NSString *imgEl = tempFolder;
imgEl = [imgEl stringByAppendingPathComponent:imagePath.lastPathComponent];
if(![mgr removeItemAtPath:imgEl error:&error]){
NSLog(@"Old element couln't be deleted.");
}
}
[self performSelector:selector withObject:error];
}
删除后文件不在目录中,所以我想它可以工作。 一个重要的细节可能是,我编写了自己的 IOS cordova 插件,因为 cordova 提供的文件系统访问方法很糟糕。
就是这样。 具体问题是:为什么以及如何发生这种情况,是否有机会改变这种行为?如果是,我应该如何进行?
顺便说一句,我使用的是cordova 3.1.0,构建目标是IOS 7。
提前致谢。
【问题讨论】: