0

我在编辑文件时遇到了一个小问题。

我正在使用下面的代码在 ios 上保存具有特定名称的文件(图像)。但问题是,当我替换存储在文件(例如 temp.jpg)中的图像时,当我打开文件时,应用程序仍会拾取上一个图像。但是,可以在资源管理器中看到新图像。如果我重新启动应用程序,则在打开图像时会出现新图像。

var folder = Ti.Filesystem.getFile(Ti.Filesystem.externalStorageDirectory, 'DocImages');

 // DocImages is a folder for files
 // ImageVar contains the blob for the new image from camera or gallery
 // docImgModel is the model class containing the name and image path of the image

 if(imageVar !== null && imageVar !== undefined){
         if (docImgModel.imagePath !== null && docImgModel.imagePath !== undefined){
              tempFile = Ti.Filesystem.getFile(docImgModel.imagePath);
              if (tempFile.exists()) {
                      tempFile.deleteFile(); // deleting already existing file
              }}


              // in case of changing the image stored in a file(the case in which i have a  
              // problem) the imgFile(below) is same as docImgModel.imagePath (above)

              imgFile = Ti.Filesystem.getFile(Ti.Filesystem.externalStorageDirectory + 'DocImages/', filenameWithExtension); // creating a new file


              // writing image to file
              imgFile.write(imageVar);
              Ti.API.info('new image saved');

              }

}

我想知道钛是否保存了已打开文件的缓存,因此无法显示新图像。如果没有,还有什么我做错了或者我可以做些什么来让它工作。

我只想显示新保存的图像。有没有办法做到这一点。

谢谢。

4

1 回答 1

2

我没有从设备打开文件,但在尝试更新屏幕上的数据时遇到了类似的问题。如果您说当您打开应用程序并加载正确的图像时出现,那么您用于加载图像的代码看起来正确且有效。我假设这是您在上面发布的代码。即使那似乎是更完整文件的代码片段。

您没有发布任何 UI 代码,这可能是您真正的问题所在。你有一个对象,我猜是某种视图,在加载新图像之前已经使用旧图像渲染。因此调试时,您可能会在上面的代码中看到新图像的数据已加载,但 UI 元素尚未正确分配或更新。

作为测试,我建议您将一些测试代码放入您的应用程序中,以允许您销毁您的 UI 元素并重新创建它们,在这种情况下您可能会看到图片正确显示。

根据这篇文章:http: //developer.appcelerator.com/question/31181/simple-image-refresh

只需将您加载的图像分配给图像的 url 即可更新它。您的示例代码未显示您尝试更新的图像对象以及如何通过加载图像的代码进行通信。

// this sets the background color of the master UIView (when there are no windows/tab groups on it)
Titanium.UI.setBackgroundColor('#000');

// create tab group
var tabGroup = Titanium.UI.createTabGroup();

var image1 = 'image1.png';
var image2 = 'image2.png';

//
// create base UI tab and root window
//
var win1 = Titanium.UI.createWindow({  
    title:'Tab 1',
    backgroundColor:'#fff'
});
var tab1 = Titanium.UI.createTab({  
    icon:'KS_nav_views.png',
    title:'Tab 1',
    window:win1
});

var img = Titanium.UI.createImageView({
    width:100,
    height:100,
    top:50,
    left:110,
    url:image1
});

win1.add(img);

var btn = Titanium.UI.createButton({
    title:'load',
    width:100,
    height:35,
    top:50,
    left:0
});

function switchImage(){
    if(img.url == image1){
        img.url = image2;
    } else {
        img.url = image1;
    }
}

btn.addEventListener('click',function(){
    switchImage();
});

setInterval(switchImage,3000);

win1.add(btn);

//
//  add tabs
//
tabGroup.addTab(tab1);  


// open tab group
tabGroup.open();
于 2012-10-10T15:28:53.603 回答