私は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;
}
}
}