你如何提前退出CNContactStoreEnumerateContactsHandler
,因为stop
被定义为布尔值而不是对象/指针?
var successfulEnumeration = store.EnumerateContacts(fetchRequest, out error, (contact, stop) =>
{
stop = true; // this does nothing of course
});
在ObjC / Swift中stop
类似于UnsafePointer<ObjCBool>
,因此:
ObjC:*stop = YES;
ObjC:stop.initialize....
斯威夫特:stop.withUnsafePointer { p in p.memory = true }
Swift2:stop.memory = true
答案 0 :(得分:5)
我认为这可能是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;
});
可能会将此作为错误发布并立即修复其开源。