我正在尝试为FastPDFKit实现单触式绑定。我在使用继承的构造函数时遇到问题。我正在尝试从fastPDFKit绑定“ReaderViewController”。 ReaderViewController继承自继承自UIViewController的MFDocumentViewController。
我的C#
NSUrl fullURL = new NSUrl (fullPath);
FastPDFKitBinding.MFDocumentManager DocManager = new FastPDFKitBinding.MFDocumentManager (fullURL);
DocManager.EmptyCache ();
//line where the errors occur
FastPDFKitBinding.ReaderViewController pdfView = new FastPDFKitBinding.ReaderViewController (DocManager);
pdfView.DocumentID = PageID.ToString ();
Source.PView.PresentViewController(pdfView, true, null);
这个代码没有构建,在制作新的ReaderViewController时给了我两个错误:
Error CS1502: The best overloaded method match for `FastPDFKitBinding.ReaderViewController.ReaderViewController(MonoTouch.Foundation.NSCoder)' has some invalid arguments (CS1502) (iOSFlightOpsMobile)
Error CS1503: Argument `#1' cannot convert `FastPDFKitBinding.MFDocumentManager' expression to type `MonoTouch.Foundation.NSCoder' (CS1503) (iOSFlightOpsMobile)
我的约束力的相关部分
namespace FastPDFKitBinding
{
[BaseType (typeof (UIAlertViewDelegate))]
interface MFDocumentManager {
[Export ("initWithFileUrl:")]
IntPtr Constructor (NSUrl URL);
[Export ("emptyCache")]
void EmptyCache ();
[Export ("release")]
void Release ();
}
[BaseType (typeof (UIViewController))]
interface MFDocumentViewController {
[Export ("initWithDocumentManager:")]
IntPtr Constructor (MFDocumentManager docManager);
[Export ("documentId")]
string DocumentID { get; set; }
[Export ("documentDelegate")]
NSObject DocumentDelegate { set; }
}
[BaseType (typeof (MFDocumentViewController))]
interface ReaderViewController {
}
}
现在,我可以通过从MFDocumentViewController获取绑定Exports并将它们放在我的ReaderViewController接口中来消除错误。
[BaseType (typeof (UIViewController))]
interface MFDocumentViewController {
}
[BaseType (typeof (MFDocumentViewController))]
interface ReaderViewController {
[Export ("initWithDocumentManager:")]
IntPtr Constructor (MFDocumentManager docManager);
[Export ("documentId")]
string DocumentID { get; set; }
[Export ("documentDelegate")]
NSObject DocumentDelegate { set; }
}
但我不想这样做,因为那些构造函数/方法是在MFDocumentViewController中定义的。如何让绑定正确使用那些继承的方法/构造函数。
答案 0 :(得分:3)
您的修复是正确的实施。
.NET中的Ctor继承(可能还有所有OO语言)都需要定义基本ctor。让我举个例子。
这很好用
class A {
public A (string m) {}
}
class B : A{
public B (string m) : base (m) {}
}
class C : B {
public C (string m) : base (m) {}
}
当您执行new C("hello")
时,A的ctor,然后是B,然后使用参数执行C.
这不起作用:
class A {
public A (string m) {}
}
class B : A {
public B () : base ("empty") {}
}
class C : B {
public C (string m) : base (m) {}
}
原因是编译器必须调用B ctor(因为C继承它)但不知道要使用哪个ctor。
因此,在将obj-C库绑定到monotouch时,请确保重新声明可能需要在某个时刻调用的所有构造函数。