1

如何使用 ? 绑定它MonoTouch

#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

尝试了以下文档,但没有运气

[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:“DocParser.Dispose(bool)”被标记为覆盖,但找不到合适的覆盖方法 (CS0115)

提前致谢

亚历克斯。

4

2 回答 2

1

绑定工具不支持为核心类的扩展生成存根。

好消息是,从根本上说,这项工作非常简单:您必须向实例 NSObject 的对象发送消息。

这意味着您可以手动编写代码,执行以下操作:

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

上面写起来可能很麻烦,所以你可以在一个虚构的类上运行生成器,然后将结果复制/粘贴到你自己的类中,该类带有一个参数“NSObject target”,如上所示。

于 2012-08-26T02:28:31.703 回答
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);
  }
}

我也不确定 [Bind] 的作用,您应该使用 [Export] 代替。

于 2012-08-25T23:23:30.393 回答