Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 领域有时不';我们不会返回最新结果_Ios_Swift_Realm - Fatal编程技术网

Ios 领域有时不';我们不会返回最新结果

Ios 领域有时不';我们不会返回最新结果,ios,swift,realm,Ios,Swift,Realm,大多数时候,我得到了所有的结果,但有时我没有,这显然是个问题。我有一个类似于: func addProduct(thisProduct:Product) { let realm = try! Realm() try! realm.write { realm.add(thisProduct) } countProductsAddedToday() // sometimes doesn't include the just added pro

大多数时候,我得到了所有的结果,但有时我没有,这显然是个问题。我有一个类似于:

func addProduct(thisProduct:Product) {
    let realm = try! Realm()
    try! realm.write {
        realm.add(thisProduct)
    }
    countProductsAddedToday() 
    // sometimes doesn't include the just added product to the count
}
问题是我的函数
countProductsAddedtoday()
在写事务之后立即调用时,并不总是返回正确数量的产品,如本例所示。如果稍后调用它(通过点击我应用程序中的按钮),它将返回正确的计数。 我希望这是一个常见的问题,我正在做一些我不应该做的事情

函数
countProductsAddedToday()
如下所示:

func countProductsAddedToday() -> Int {
    let predicate = NSPredicate(format: "timeAdded >= %d", unixTimestampForToday)
    let realm = try! Realm()
    let results = realm.objects(Product).filter(predicate)
    return results.count
}
附加信息:我不能确定,但我认为当快速添加产品时,问题会更频繁地发生,但随后就停止了。是否存在延迟写入或缓存结果之类的情况

在物理设备上添加产品时出现的错误:

0   Realm                               0x000000010042d7e0 _ZN5realm4util18terminate_internalERNSt3__118basic_stringstreamIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE + 44
1   Realm                               0x000000010042da0c _ZN5realm4util9terminateEPKcS2_l + 340
2   Realm                               0x00000001002a70ac _ZN5realm5_impl16RealmCoordinator19run_async_notifiersEv + 2124
3   Realm                               0x00000001002a6668 _ZN5realm5_impl16RealmCoordinator9on_changeEv + 40
4   Realm                               0x000000010026adf4 _ZN5realm5_impl20ExternalCommitHelper6listenEv + 672
5   Realm                               0x000000010026b89c _ZZN5realm5_impl20ExternalCommitHelperC1ERNS0_16RealmCoordinatorEENK3$_0clEv + 24
6   Realm                               0x000000010026b878 _ZNSt3__112__async_funcIZN5realm5_impl20ExternalCommitHelperC1ERNS2_16RealmCoordinatorEE3$_0JEE9__executeIJEEEvNS_15__tuple_indicesIJXspT_EEEE + 64
7   Realm                               0x000000010026b82c _ZNSt3__112__async_funcIZN5realm5_impl20ExternalCommitHelperC1ERNS2_16RealmCoordinatorEE3$_0JEEclEv + 24
8   Realm                               0x000000010026b73c _ZNSt3__119__async_assoc_stateIvNS_12__async_funcIZN5realm5_impl20ExternalCommitHelperC1ERNS3_16RealmCoordinatorEE3$_0JEEEE9__executeEv + 32
9   Realm                               0x000000010026bfc0 _ZNSt3__114__thread_proxyINS_5tupleIJMNS_19__async_assoc_stateIvNS_12__async_funcIZN5realm5_impl20ExternalCommitHelperC1ERNS5_16RealmCoordinatorEE3$_0JEEEEEFvvEPSB_EEEEEPvSG_ + 388
10  libsystem_pthread.dylib             0x0000000180cebb28 <redacted> + 156
11  libsystem_pthread.dylib             0x0000000180ceba8c <redacted> + 0
12  libsystem_pthread.dylib             0x0000000180ce9028 thread_start + 4
0领域0x000000010042d7e0\u zn5realm4util18终止\u内部资源st3\u 118basic\u stringstreamIcNS1\u 11char\u traitsicens1\u 9alloctoriceeee+44
1个领域0x000000010042da0c\u zn5realm4util9terminatePEPCS2\u l+340
2个领域0x00000001002a70ac\u ZN5realm5\u impl16RealmCoordinator19run\u async\u notifiersEv+2124
3个领域0x00000001002a6668_ZN5realm5_impl16RealmCoordinator9on_changeEv+40
4领域0x000000010026adf4 _ZN5realm5_impl20externalcommitterper6listenev+672
5领域0x000000010026b89c ZZN5realm5 IMPL20ExternalCommissionernS0 16RealmCoordinatorEENK3$0clEv+24
6领域0x000000010026b878\u ZNSt3\u 112\u异步\u函数5realm5\u实施外部委托PercerEns2\u 16 RealmCoordinatore3$\u执行单元表示jxspt\u EEEE+64
7领域0x000000010026b82c\u ZNSt3\u 112\u异步\u函数5realm5\u执行外部委员会Perc1erns2\u 16 RealmCoordinatore3$\u 0JEEclEv+24
8领域0x000000010026b73c\u ZNSt3\u 119\u异步\u assoc\u stateIvNS\u 12\u异步\u功能5realm5\u IMPL20ExternalCommitterPerc1erns3\u 16 RealmCoordinatore3$\u 0JEEEE9\u executeEv+32
9领域0x000000010026bfc0\u ZNSt3\u 114\u线程\u代理\u Tupleijmns\u 19\u异步\u assoc\u stateIvNS\u 12\u异步\u函数5realm5\u实施外部委员会Perc1erns5\u 16实体协调3$jeeeefvvepsb\ueee pvsg+388
10 libsystem_pthread.dylib 0x0000000180cebb28+156
11 libsystem_pthread.dylib 0x0000000180ceba8c+0
12 libsystem_pthread.dylib 0x0000000180ce9028 thread_start+4

将您的功能更改为:

func countProductsAddedToday() -> Int {
    let predicate = NSPredicate(format: "timeAdded >= %d", unixTimestampForToday)
    let realm = try! Realm()
    realm.refresh()
    let results = realm.objects(Product).filter(predicate)
    return results.count
}

将您的功能更改为:

func countProductsAddedToday() -> Int {
    let predicate = NSPredicate(format: "timeAdded >= %d", unixTimestampForToday)
    let realm = try! Realm()
    realm.refresh()
    let results = realm.objects(Product).filter(predicate)
    return results.count
}

countProductsAddedToday()
是在与示例代码所示相同的线程上被调用,还是被分派到不同的队列或线程?我已经尝试了这两种方法,在这两种情况下都存在相同的问题。我已经在模拟器上对此进行了测试。现在我在一个物理设备上尝试了它(每秒添加一个产品),它似乎工作得很好,但随后我遇到了一个崩溃
realm\u协调器。cpp:435:[realm-core-0.97.4]断言失败:m\u advancer\u sg->get\u version\u of_current\u transaction()==new\u notifiers.front()->version()
,重复了整个过程,事情又发生了。显然,用户不会每秒钟添加一个产品,但我喜欢所有发生的事情都是一致的,我不明白这里发生了什么。现在在物理设备上,我甚至不需要每秒钟添加一次,崩溃是随机发生的。如果您需要更多信息,请呼叫。@TimSim:如果您可以用最新版本的Realm复制此崩溃,请在我们的服务器上为其创建一个问题?谢谢
countProductsAddedToday()
是在与示例代码所示相同的线程上被调用,还是被分派到不同的队列或线程?我已经尝试了这两种方法,在这两种情况下都存在相同的问题。我已经在模拟器上对此进行了测试。现在我在一个物理设备上尝试了它(每秒添加一个产品),它似乎工作得很好,但随后我遇到了一个崩溃
realm\u协调器。cpp:435:[realm-core-0.97.4]断言失败:m\u advancer\u sg->get\u version\u of_current\u transaction()==new\u notifiers.front()->version()
,重复了整个过程,事情又发生了。显然,用户不会每秒钟添加一个产品,但我喜欢所有发生的事情都是一致的,我不明白这里发生了什么。现在在物理设备上,我甚至不需要每秒钟添加一次,崩溃是随机发生的。如果您需要更多信息,请呼叫。@TimSim:如果您可以用最新版本的Realm复制此崩溃,请在我们的服务器上为其创建一个问题?谢谢这个答案正是您在多线程场景中寻找的。在看到最新结果之前,您需要刷新任何后台线程上的域。同样的情况也适用于主线程,如果您从后台线程写入,并在写入后直接发送到主线程。问题是由于我的愚蠢-
unixTimestampForToday
有时是当前秒而不是午夜,因此,当插入操作在一秒钟内开始,而计数在另一秒钟内发生时,我无法获得最新的产品,这就是它看起来不一致的原因。这就是您在多线程场景中寻找的答案。在看到最新结果之前,您需要刷新任何后台线程上的域。同样的情况也适用于主线程,如果您从后台线程写入,并在写入后直接发送到主线程。问题是由于我的愚蠢-
unixTimestampForToday
有时是当前秒而不是午夜,因此,当插入操作在一秒钟内开始,而计数在另一秒钟内发生时,我无法得到最新的产品,这就是为什么它看起来不一致的原因。