相关疑难解决方法(0)

如何在进行API调用之前使用ReactiveCocoa进行透明身份验证?

我在一个应用程序中使用ReactiveCocoa,该应用程序调用远程Web API.但在从给定的API主机检索任何内容之前,应用程序必须提供用户的凭据并检索API令牌,然后用于签署后续请求.

我想抽象出这个身份验证过程,以便每当我进行API调用时它都会自动发生.假设我有一个包含用户凭据的API客户端类.

// getThing returns RACSignal yielding the data returned by GET /thing.
// if the apiClient instance doesn't already have a token, it must
// retrieve one before calling GET /thing 
RAC(self.thing) = [apiClient getThing]; 
Run Code Online (Sandbox Code Playgroud)

如何使用ReactiveCocoa透明地导致API的第一个(也是唯一的)请求检索,并且作为副作用,在发出任何后续请求之前安全地存储API令牌?

我还可以使用combineLatest:(或类似的)启动多个同时发出的请求,并且它们都会隐式等待检索令牌.

RAC(self.tupleOfThisAndThat) = [RACSignal combineLatest:@[ [apiClient getThis], [apiClient getThat]]];
Run Code Online (Sandbox Code Playgroud)

此外,如果在进行API调用时检索令牌请求已经在飞行中,则该API调用必须等到检索令牌请求完成.

我的部分解决方案是:

基本模式将用于将flattenMap:产生令牌的信号映射到给定令牌执行所需请求并产生API调用结果的信号.

假设一些方便的扩展NSURLRequest:

- (RACSignal *)requestSignalWithURLRequest:(NSURLRequest *)urlRequest {
    if ([urlRequest isSignedWithAToken])
        return [self performURLRequest:urlRequest];

    return [[self getToken] flattenMap:^ RACSignal * (id token) {
        NSURLRequest *signedRequest = …
Run Code Online (Sandbox Code Playgroud)

cocoa reactive-programming reactive-cocoa

25
推荐指数
1
解决办法
5021
查看次数

NSMutableDictionary KVO

我正在尝试使用KVO观察字典中的变化.

例:

dictionary = [NSMutableDictionary new];
[dictionary setObject:@"test1" forKey:@"key1"];
[dictionary setObject:@"test2" forKey:@"key2"];    
[dictionary setObject:@"test3" forKey:@"key1"];
Run Code Online (Sandbox Code Playgroud)

我希望无论何时将值添加到字典中,都能够挂钩观察者.删除或替换(即在上述情况下,无论何时调用任何setObject方法)

总而言之:我想要一个功能

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
Run Code Online (Sandbox Code Playgroud)

当我向字典添加任何新条目,或删除任何条目,或者替换任何条目时调用.

NOT:我不想指定我正在观察的键.(例如,仅在添加@"key1"时观察),因为此解决方案无法缩放.

objective-c key-value-observing

5
推荐指数
2
解决办法
6991
查看次数