在委托方法上使用EventArgs属性时,它会生成事件处理程序类,其属性基于除第一个方法之外的方法参数。
生成的事件args类中缺少第一个参数。
例如:
[Protocol, Model]
[BaseType(typeof(NSObject))]
public interface TestDelegate
{
// @required -(void)DidReceiveFrom:(NSString * _Nonnull)p1 withP2:(NSString * _Nonnull)p2 withP3:(NSString * _Nonnull)p3 withP4:(NSString * _Nonnull)p4;
[Abstract]
[Export("DidReceiveFrom:withP2:withP3:withP4:")]
[EventArgs("DidReceiveFrom")]
void DidReceiveFrom(string p1, string p2, string p3, string p4);
然后生成的EventArgs类变为:
//
// EventArgs classes
//
public partial class DidReceiveFromEventArgs : EventArgs {
public DidReceiveFromEventArgs (string p2, string p3, string p4)
{
this.p2 = p2;
this.p3 = p3;
this.p4 = p4;
}
public string p2 { get; set; }
public string p3 { get; set; }
public string p4 { get; set; }
}
所以它绝对缺少p1属性。如何避免这种行为?
答案 0 :(得分:0)
我猜您正在使用 echo '
<div class="label-container">
<input type="checkbox" name="services[]" id="'.$value['services'].'" value="HairCut">
<label for="Haircut">Haircut</label>
</div>
';
工具为Objective C API生成C#代码。
如果是这样,那么,基本上你需要记住它是一个帮助工具,但不是100%保证它会为你获得正确的C#代码。
无论如何,最简单的解决方法是手动编辑C#代码并在错过时添加此参数。
您没有显示objective sharpie
的C#代码。可能是你有第一个参数作为发送者,然后所有其他3个参数作为事件参数?
如果是这种情况,请在C#API中注释TestDelegate
属性并重新编译绑定。
答案 1 :(得分:0)
根据Xamarin文档,此行为是默认行为:
对于带有多个参数的事件(在Objective-C中,约定是委托类中的第一个参数是发送方对象的实例),您必须为生成的EventArgs类提供所需的名称。是。这是通过Model类中方法声明的EventArgs属性完成的。
似乎我生成绑定的源库中的委托并不严格遵循此规则,第一个参数是字符串形式的半发件人。