1

ユーザーが iOS フォト ギャラリーから画像を選択する非常に単純なアプリがあります。

イベントに渡された TIBlob はTitanium.Media.openPhotoGallery.success、アプリケーション レベルのイベントに渡されます。

問題は、アプリケーション レベルのイベントを受信したときに TIBlob が NULL であることです。

以下は、完全なコード サンプルです。

Titanium.UI.setBackgroundColor('#000');

var win = Ti.UI.createWindow({title: 'Camera Test', exitOnClose: true, fullscreen: true, backgroundColor: '#ffffff'});

var bt = Ti.UI.createButton({'title': 'Gallery', top: 10, width: 200, height: 50});
bt.addEventListener('click', function(e) {
    Titanium.Media.openPhotoGallery({
            success:function(event) {   
                if(event.mediaType == Ti.Media.MEDIA_TYPE_PHOTO) {
                    alert(event.media);
                    Ti.App.fireEvent('uploadImage', {image: event.media, source: 'gallery'});
                }else {
                    alert('Image was not uploaded because the type was invalid.');
                }
            },
            cancel:function() {
            },
            error:function(err) {
                alert('Error selecting image from gallery: ' + err);
                Ti.API.error(err);
            },
            allowEditing: false,
            autohide: true,
            mediaTypes:[Ti.Media.MEDIA_TYPE_PHOTO]
      });
});

Ti.App.addEventListener('uploadImage', function(e) {
    alert(e.image);
    alert(e.source);
});

win.add(bt);
win.open();

助言がありますか?

4

1 に答える 1

3

Appcelerator ガイドでは、渡されたオブジェクトとイベントは JSON でシリアライズ可能でなければならないと述べていますhttps://wiki.appcelerator.org/display/guides/Event+Handling#EventHandling-Firingevents。TiBlob はシリアル化できないため、ブログはイベントを通過していないと思います。

これが非常に単純なアプリである場合は、イベントを発生させるのではなく、関数呼び出しに変更することをお勧めします。これにより、BLOB が保持されます。ただし、これが絶対にイベントである必要がある場合は、event.media.nativePath代わりに渡して、実際に何かを行う必要があるときにそのブロブから読み取ることができます。

于 2012-04-30T16:40:53.543 に答える