Sus*_*ver 4 xamarin.ios xamarin
你怎么早退出CNContactStoreEnumerateContactsHandler的stop被定义为一个布尔值不是一个对象/指针?
var successfulEnumeration = store.EnumerateContacts(fetchRequest, out error, (contact, stop) =>
{
stop = true; // this does nothing of course
});
Run Code Online (Sandbox Code Playgroud)
在ObjC/Swift中stop会是这样的UnsafePointer<ObjCBool>,因此:
ObjC: *stop = YES;
ObjC: stop.initialize....
迅速: stop.withUnsafePointer { p in p.memory = true }
Swift2: stop.memory = true
我认为这可能是Xamarin.iOS中的一个错误,如果我们看一下NSSetEnumerator,它的委托签名如下所示:
public delegate Void NSSetEnumerator (NSObject obj, ref Boolean stop)
Run Code Online (Sandbox Code Playgroud)
我认为它需要ref关键字或你设置的值不会改变.
CNContactStoreEnumerateContactsHandler供参考
public delegate Void CNContactStoreEnumerateContactsHandler (CNContact contact,Boolean stop)
Run Code Online (Sandbox Code Playgroud)
我只是要用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;
});
Run Code Online (Sandbox Code Playgroud)
可能会发布此错误并立即修复其开源.
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |