0

ファイルの編集中にちょっとした問題に直面しています。

以下のコードを使用して、ios に特定の名前のファイル (画像) を保存しています。しかし、問題は、ファイル (temp.jpg など) に保存されている画像を置き換えると、ファイルを開いたときにアプリがまだ前の画像を取得することです。ただし、新しいイメージは Explorer で見ることができます。アプリを再起動すると、画像を開くときに新しい画像が表示されます。

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 に答える