Reactivecocoa: إطلاق الإشارة مرتين ، لا يتم التقاط النسخ المكررة المتميزة

تم إنشاؤها على ٢٠ ديسمبر ٢٠١٣  ·  3تعليقات  ·  مصدر: ReactiveCocoa/ReactiveCocoa

طيب صبي مرتبك هنا.

viewModel يحتوي على خاصية searchString التي تحققت منها ولم يتم تعيينها إلا مرة واحدة. ومع ذلك ، يتم إطلاق هذا مرتين ، مما يؤدي إلى مكالمتين API. لا يهم أنه لا ينبغي أن يتم إطلاق النار مرتين ، ولكن هناك حتى distinctUntilChanged هناك لا يمنع ذلك. إذا وضعت نقطة توقف في map ، فإنها بالتأكيد تصل مرتين بنفس القيمة لـ queryString .

RACSignal *searchResultsSignal = [[[[[[[[RACObserve(self, searchString)
    ignore:nil]
    ignore:@""]
    distinctUntilChanged]
    deliverOn:[RACScheduler scheduler]]
    map:^id (NSString *queryString) {
        @strongify(self);
        TCThirdPartyAPIType type = [TCAPIIndividual thirdPartyAPITypeForAPITypeString:self.activeAPI.APITypeString];
        return [TCThirdPartyAPIHelper fetchResultsForAPIType:type withQueryString:queryString latitude:self.latitude longitude:self.longitude];
    }]
    switchToLatest]
    map:^id(TCAPIResponse *response) {
        return response.result.array;
    }] catch:^RACSignal *(NSError *error) {
        return [RACSignal return: @[]];
    }];

نسيت أن أذكر أنني إذا اشتركت مباشرة في RACObserve(self, searchString) ، وأدرجت نقطة توقف ، فسيتم التقاطها مرة واحدة فقط.

question

التعليق الأكثر فائدة

تعليقك أنقذ حياتي: د

ال 3 كومينتر

القرف. لا تهتم. اشتركت مرتين.

تعليقك أنقذ حياتي: د

لقد واجهت هذه المشكلة من قبل , أستخدم uitextfiled عندما أستمع إلى نص يتم إطلاق الإشارة مرتين ، بسبب تغيير uitextfiled هو FirstResponder ، عندما لا يتم تشغيل FirstResponder ، يتم تشغيل YES

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات