0

私はMonoTouchでThree20TTPhotoViewControllerを使用しようとしています。TTPhotoからFacebookPhotoを派生させ、TTPhotoSourceからFacebookPhotoSourceを派生させて、TTPhotoViewControllerを呼び出そうとしていますが、ViewControllerをプッシュすると次の例外が発生します。

Objective-Cの例外がスローされました。名前:NSInvalidArgumentException理由:* -[NSPlaceholderString initWithFormat:locale:arguments:]:nil引数

このgithubプロジェクトのモノタッチバインディングに気づきました:https ://github.com/mono/monotouch-bindings/tree/492f68c3c2007f0638452cc8a5a762556db224ba/Three20/bindingにphotoAtIndexバインディングがないので、それを追加して再コンパイルしましたが、なぜこの例外が発生するのか理解できませんでした。

TTPhotoViewControllerを呼び出す方法は次のとおりです。

List<Photo> photoList = FacebookGraphApi.Instance.GetAlbumPhotos(album.id);
List<FacebookPhoto> fbPhotoList = photoList.Select(x => new FacebookPhoto(x)).ToList();
var photos = new TTPhotoViewController();
photos.PhotoSource = new FacebookPhotoSource(fbPhotoList);
NavController.PushViewController(photos, true);

これがTTPhotoSourceの定義です

    class FacebookPhotoSource : TTPhotoSource
    {
        List<FacebookPhoto> _photoList;

        public FacebookPhotoSource (List<FacebookPhoto> photoList)
        {
            _photoList = photoList;
            int i = 0;
            foreach (FacebookPhoto photo in photoList) {
                photo.PhotoSource = this;
                photo.Index = i++;
            }
        }

        public override string Title {
            get {
                return "Facebook Photos";
            }
            set  {
                throw new NotImplementedException();
            }
        }

        public override int NumberOfPhotos {
            get {
                return _photoList.Count;
            }
        }

        public override int MaxPhotoIndex {
            get {
                return _photoList.Count -1;
            }
        }

        public override TTPhoto PhotoAtIndex(int photoIndex)
        {
            return _photoList[photoIndex];
        }

    }

FacebookPhotoの定義は次のとおりです。

    class FacebookPhoto : TTPhoto
    {
        Photo _photo;
        public FacebookPhoto(Photo photo)
        {
            _photo = photo;
        }

        public override string Caption {
            get {
                if(_photo.name == null)
                    return "";
                return _photo.name;
            }
            set {
                throw new NotImplementedException();
            }
        }

        public override TTPhotoSource PhotoSource { get; set; }

        public override int Index { get; set; }

        public override SizeF Size {
            get {
                return new SizeF(_photo.width, _photo.height);
            }
            set {
                throw new NotImplementedException();
            }
        }

        public override string URLForVersion (int version)
        {
            switch (version) {
            case 4:
                return _photo.picture;
            default:
                return _photo.source;
            }
        }
    }
4

0 に答える 0