2012-08-25 3 views
1

MonoTouch을 사용하여 어떻게 바인딩 할 수 있습니까 ?? 이 운이바인딩 MonoTouch NSObject 범주

[BaseType (typeof (NSObject)), Bind ("NSObject")] 
public interface NSObject2 
{ 
    [Bind("objectAtIndexedSubscript:")] 
    NSObject ObjectAtIndexedSubscript (uint idx); 

    [Bind("setObject:atIndexedSubscript:")] 
    void SetObjectAtIndexedSubscript (NSObject obj, uint idx); 

    [Bind("setObject:forKeyedSubscript:")] 
    void SetObjectForKeyedSubscript (NSObject obj, NSObject key); 

    [Bind("objectForKeyedSubscript:")] 
    NSObject ObjectForKeyedSubscript (NSObject key); 
} 

오류 CS0115 같은 오류의 톤을 제공 Documentation 다음 없지만, 한 시도

#if __IPHONE_OS_VERSION_MAX_ALLOWED < 60000 
@interface NSObject (SubscriptingSupport) 

- (id)objectAtIndexedSubscript:(NSUInteger)idx; 
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx; 
- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key; 
- (id)objectForKeyedSubscript:(id)key; 

@end 
#endif 

는`DocParser.Dispose (부울)는 '오버라이드로 표시됩니다 그러나 재정의 할 적합한 메소드가 없습니다. (CS0115)

미리 감사드립니다.

Alex.

답변

1

바인딩 도구는 핵심 클래스에 대한 확장을위한 스텁 생성을 지원하지 않습니다.

좋은 소식은 근본적으로 작업이 매우 간단하다는 것입니다. NSObject 인스턴스의 개체에 메시지를 보내야합니다.

은 당신이 좋아하는 무언가를 손으로 코드를 작성할 수 있다는 것을 의미한다 :

void GetObjectAtIndex (NSObject target, int objectAt) 
{ 
    Runtime.GetNSObject (Messaging.objc_msgSend_int (target.Handle, Selector.GetHandle ("objectAtIndexedSubscript:", objectAt)); 
} 

복사하면 다음 가상 클래스에 발전기를 실행할 수 있도록 위, 손으로 쓸 번거로울 수 있습니다/위와 같이 매개 변수 "NSObject target"을 사용하는 클래스에 결과를 붙여 넣습니다.

0

난 당신이 MonoTouch.Foundation 외에 한 다른 네임 스페이스를 가지고, 같은 클래스 이름을 유지할 필요가 있다고 생각 :

namespace WhateverNamespaceYouWantBesidesMonoTouch.Foundation 
{ 
    [BaseType (typeof (MonoTouch.Foundation.NSObject))] 
    public interface NSObject 
    { 
    [Export("objectAtIndexedSubscript:")] 
    MonoTouch.Foundation.NSObject ObjectAtIndexedSubscript (uint idx); 

    [Export("setObject:atIndexedSubscript:")] 
    void SetObjectAtIndexedSubscript (MonoTouch.Foundation.NSObject obj, uint idx); 

    [Export("setObject:forKeyedSubscript:")] 
    void SetObjectForKeyedSubscript (MonoTouch.Foundation.NSObject obj, MonoTouch.Foundation.NSObject key); 

    [Export("objectForKeyedSubscript:")] 
    MonoTouch.Foundation.NSObject ObjectForKeyedSubscript (MonoTouch.Foundation.NSObject key); 
    } 
} 

나는 또한 [바인딩]를 사용한다 않습니다 모르겠어요 [ 내보내기]를 클릭하십시오.

+0

안녕하세요 jonathanpeppers 내가 이해할 수있는대로 Bind ("NSObject") 여기 보이는 NSObject 클래스에 모든 인터페이스 코드를 첨부합니다. https://github.com/mono/maccore/blob/master/src/foundation.cs#L3317 그게 내가 믿는 것, 내가 틀릴 수도 있지만 그것은 결과 코드에서 .g.cs 파일이 내 자신의 네임 스페이스를 사용하고'public partial class NSObject'로 선언 되었기 때문에 소스에서 빌드 한 경우 일 것입니다. MonoTouch.dll NSObject가 부분적이 아니기 때문에'MonoTouch.Foundation'을 사용하지만 역시 실패했습니다. – dalexsoto

+0

NSObject.g.cs의 결과 코드를'Static'으로 변경하여 NSObject 클래스를 확장하려고 시도했습니다. (Extension Methods) 그러나 그것도 작동하지 않았다. 나는 당신의 솔루션을 지금 결과로 핑 (ping) 할 것입니다. – dalexsoto

+0

아니요, 이것도 작동하지 않습니다 ->'오류 CS0115 : DocParser.Dispose (bool)이 오버라이드로 표시되었지만 적합한 메소드가 없습니다. 덮어 쓰기 (CS0115)' – dalexsoto

관련 문제