我正在构建一个cordova应用程序(主要用于IOS和Android),用户可以在其中拍摄图像,重新拍摄(等)并在本地保存 .
我目前正在努力使用cordova cameraPlugin . 所以,这里是对问题的简短描述 .
当用户拍摄图像时,它会在本地保存在apps temp文件夹中,用户可以在UIWebView中查看 . 重新拍摄时,图像将从临时文件夹中删除,不再可用(在RAM和本地FS中) . 只要用户没有重新拍摄图像2次或更多次,它就可以工作,如果他不是最后一个图像,则第一个图像将在WebView中被引用/呈现 . 重新打开应用程序后,图像将正确显示 .
一个例子:
-
用户拍摄第一张图像 . ==> cdv_photo_001.png
-
第二个 . ==> cdv_photo_002.png,第一个将被删除(似乎工作正常)
-
第三个 . ==> cdv_photo_001.png,第二张图片将被删除 .
第三个图像看起来与 deleted 第一个图像相同 . 第三个之后的每个图像都会发生这种情况 . It works fine after restarting the app
我已经尝试禁用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 .
提前致谢 .
1 回答
好的伙计们,我终于明白了 .
整个问题与我的代码或任何cordova代码无关 . 那么为什么会这样呢? ==>我并不确切地知道,因为看起来很多人都会发现这个错误或者你可能称之为的错误 .
他们都像我一样试图删除或停用缓存,他们的一些问题非常接近我自己,但大多数问题都没有,所以我花了一段时间才发现解决方案 .
我读了this thread并试图在图像路径上添加一个时间戳,然后就可以了!我的结论是,UIWebView和缓存管理可能存在问题 .
或者它可能证明是一般的WebView问题,我将能够在几天内检查Adroid设备 .