2012-04-24 134 views
3

我正在使用MonoTouch构建iOS应用程序并试图实现自定义的NSUrlProtocol。在MonoTouch中注册自定义NSUrlProtocol

当我登记我自己的协议实现中,我得到以下错误:

WebKit discarded an uncaught exception in the webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate: * -canInitWithRequest: only defined for abstract class. Define -[Foo.Network.NetworkServices+TestProtocol canInitWithRequest:]!

什么可能会导致这有什么想法?

下面是代码:

//Registering the protocol  
NSUrlProtocol.RegisterClass(new Class(typeof(TestProtocol))); 

public class TestProtocol : NSUrlProtocol 
{ 
    public TestProtocol() 
    { 
     this.Client = new TestProtocolClient(); 
    }  

    public override bool CanInitWithRequest (NSUrlRequest request) 
    { 
     return true; 
    } 
} 

public class TestProtocolClient : NSUrlProtocolClient 
{ 
    public override void DataLoaded (NSUrlProtocol protocol, NSData data) 
    { 
    } 

    public override void FailedWithError (NSUrlProtocol protocol, NSError error) 
    { 
    } 

    public override void ReceivedResponse (NSUrlProtocol protocol, NSUrlResponse response, NSUrlCacheStoragePolicy policy) 
    { 
    } 

    public override void Redirected (NSUrlProtocol protocol, NSUrlRequest redirectedToEequest, NSUrlResponse redirectResponse) 
    { 
    } 

    public override void CachedResponseIsValid (NSUrlProtocol protocol, NSCachedUrlResponse cachedResponse) 
    { 
    } 

    public override void FinishedLoading (NSUrlProtocol protocol) 
    { 
    } 

    public override void ReceivedAuthenticationChallenge (NSUrlProtocol protocol, NSUrlAuthenticationChallenge challenge) 
    { 
    } 

    public override void CancelledAuthenticationChallenge (NSUrlProtocol protocol, NSUrlAuthenticationChallenge challenge) 
    { 
    } 
} 

回答

3

在MonoTouch中的NSUrlProtocol支持已经被停止。

它将在下一个测试版本中修复(MonoTouch 5.3.3)。还有一个sample可用于显示它如何工作(但它显然不会工作,直到出现MonoTouch 5.3.3)。

如果是紧急事件,Xamarin的support通常可以提供预览版本。