小编And*_*ndi的帖子

可以在单元测试中重置dispatch_once的状态,使它们再次运行

是否可以在单元测试tearDown中重置dispatch_once代码的状态?

我认为如果我们的单元测试可以从一个非常干净的状态运行会很好,但我们正在努力使用dispatch_once和一些使用dispatch进行的单例测试.

objective-c grand-central-dispatch

32
推荐指数
1
解决办法
1万
查看次数

如何将两个异步网络调用与ReactiveCocoa组合在一起

我有两个网络信号,我想合并,但有一些限制.

让我们调用网络信号A和B.A确实使用AFNetworking在缓存中查找资源并立即返回该请求的任何响应.B还会考虑缓存,但可以转到远程服务器以重新验证响应.

好的,我想做的是:

要求A:

  • 应该尽快发送sendNext.
  • 如果B已经完成了sendNext,我们将忽略A.
  • 如果出现问题,A会产生错误,我们应该忽略它.

要求B:

  • 即使A已经完成了sendNext,也应尽快执行sendNext.
  • 如果出现问题,我会对B中的错误感到很满意,但它不应该停止A.

我目前的解决方案是:

- (RACSignal *)issueById:(NSString *)issueId {

    RACSignal *filterSignal = [RACSignal createSignal:^RACDisposable *(id <RACSubscriber> subscriber) {
        RACSignal *cacheSignal = [[IssueWSRequest instance] issueWithId:issueId cachePolicy:NSURLRequestReturnCacheDataDontLoad];

        return [cacheSignal subscribeNext:^(id x) {
            [subscriber sendNext:x];
        } error:^(NSError *error) {
            NSLog(@"Ignore error");
            [subscriber sendCompleted];
        } completed:^{
            [subscriber sendCompleted];
        }];
    }];

    RACSignal *remoteSignal = [[IssueWSRequest instance] issueWithId:issueId cachePolicy:NSURLRequestUseProtocolCachePolicy];

    RACSignal *combined = [RACSignal merge:@[newSign, remoteSignal]];
    return combined;
}
Run Code Online (Sandbox Code Playgroud)

我知道这个解决方案不符合我的要求,所以我想知道是否有人可以帮助我找到更好的解决方案.

我的解决方案(源自@ JustinSpahr-Summers的回答):

- (RACSignal *)issueById:(NSString *)issueId {

    RACSubject *localErrors = …
Run Code Online (Sandbox Code Playgroud)

objective-c reactive-cocoa

8
推荐指数
1
解决办法
2953
查看次数

CoreData无法解决HTTP服务更新对象的错误

我想我理解错误信息:CoreData无法解决错误,但我不确定应该如何处理它.

我们有一个应用程序,我们使用Core Data来保存从JSON服务返回的数据.今天我正在做以下事情.

  1. 从持久存储中获取本地对象并返回到UI
  2. 询问服务器是否更新了对象 - 当我得到答案时,我更新了Core Data托管对象
  3. 使用更新的对象更新UI

问题是; 即使我不使用多线程,当HTTP请求删除我的UI保留的托管对象时,我有时会收到错误.我试图用returnsObjectsAsFaults获取对象为NO.我以为我可以访问托管对象的所有关系和属性,即使它已被删除(只要我的UI保留了它).

我该如何解决这个问题?

我以为我可以使用单独的NSManagedObjectContext进行读写.我做了这个测试:

MyAuthorMO *authorUpdate = [[MyAuthorMO alloc] init]; // I have made this init insert the object into the updateContext
authorUpdate.firstname = @"Hans";
authorUpdate.lastname = @"Wittenberg";
authorUpdate.email = @"Hans@somedomain.no";

NSManagedObjectContext *updateContext = [[MyCoreManager getInstance] managedObjectContext];

NSError *error = nil;
[updateContext save:&error];

NSManagedObjectContext *readContext = [[MyCoreManager getInstance] readOnlyContext];

NSFetchRequest *fetchRequest = [managedObjectModel fetchRequestFromTemplateWithName:@"authorByEmail" substitutionVariables:[NSDictionary dictionaryWithObject:@"Hans@somedomain.no" forKey:@"EMAIL"]];
[fetchRequest setReturnsObjectsAsFaults:NO];

NSArray *authors = [readContext executeFetchRequest:fetchRequest error:&error];

MyAuthorMO * readAuthor = [authors objectAtIndex:0]; …
Run Code Online (Sandbox Code Playgroud)

iphone core-data

6
推荐指数
1
解决办法
1万
查看次数

在 SwiftUI 中为 TextField 设置初始值 - 比较新旧值

我看过很多关于如何使用空 TextField 收集新值的示例和教程,但没有一个显示如何使用 TextField 来编辑值。

在我的用例中,我希望 TextField 预先填充/预填充来自我的视图模型的数据,然后当用户编辑数据时,应该启用保存按钮。在我的表单中,我还有一个导航链接,它通向一个子页面,用户可以在其中从列表中选择一些内容,然后返回到表单。

只要我使用一个空字段,它就会像描述的那样运行;用户可以在字段中输入临时内容,导航到子页面,临时值仍然和他离开时一样。

struct TextFieldDemo: View {

    var model:String    // Actual a more complex view model
    @State var editedValue:String = ""

    var body: some View {
        VStack(alignment: .leading, spacing: 20) {
            Group{
                Text("Some label")
                TextField("Placeholder text", text: $editedValue)
            }
            Divider()
            Text("Some navigation link to push in a page where " +
                "the user can select something from a list and click back...")

            // If the user starts to edit the textfield - follows a …
Run Code Online (Sandbox Code Playgroud)

swiftui

3
推荐指数
1
解决办法
1890
查看次数