xamarin – 提前退出`CNContactStoreEnumerateContactsHandler`枚举

xamarin – 提前退出`CNContactStoreEnumerateContactsHandler`枚举,第1张

概述你如何提前退出CNContactStoreEnumerateContactsHandler,因为stop被定义为布尔值而不是对象/指针? var successfulEnumeration = store.EnumerateContacts(fetchRequest, out error, (contact, stop) =>{ stop = true; // this does 你如何提前退出CNContactStoreEnumerateContactsHandler,因为stop被定义为布尔值而不是对象/指针?

var successfulEnumeration = store.EnumerateContacts(fetchRequest,out error,(contact,stop) =>{        stop = true; // this does nothing of course  });

在ObjC / Swift中,停止将类似于UnsafePointer< ObjCBool​​>因此:

ObjC:* stop = YES;

ObjC:stop.initialize ….

Swift:stop.withUnsafePointer {p in p.memory = true}

Swift2:stop.memory = true

解决方法 我认为这可能是Xamarin.iOS中的一个错误,如果我们看一下 NSSetEnumerator,它的委托签名看起来像这样:

public delegate VoID NSSetEnumerator (NSObject obj,ref Boolean stop)

我认为它需要ref关键字或你设置的值不会改变.

CNContactStoreEnumerateContactsHandler供参考

public delegate VoID CNContactStoreEnumerateContactsHandler (CNContact contact,Boolean stop)

我只是要用NSSetEnumerator运行测试,看看它在设置停止时是否停止.

更新
如果您运行下面的代码,您会看到它在达到5时实际停止:

NSSet set = new NSSet<NSNumber> (new []{    new NSNumber(1),new NSNumber(2),new NSNumber(3),new NSNumber(4),new NSNumber(5),new NSNumber(6),new NSNumber(7),new NSNumber(8),new NSNumber(9)});set.Enumerate ((NSObject obj,ref bool stop) => {    var num = obj as NSNumber;    if (num.Int32Value == 5)        stop = true;});

可以将此作为错误发布并立即修复其开源.

总结

以上是内存溢出为你收集整理的xamarin – 提前退出`CNContactStoreEnumerateContactsHandler`枚举全部内容,希望文章能够帮你解决xamarin – 提前退出`CNContactStoreEnumerateContactsHandler`枚举所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1062290.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存