视图控制器仅在第一次保存到 coredata 时填写我的表单

Posted

技术标签:

【中文标题】视图控制器仅在第一次保存到 coredata 时填写我的表单【英文标题】:View controller is only filling in my form on the first save to coredata 【发布时间】:2013-07-22 14:28:57 【问题描述】:

所以这对我来说有点奇怪,但我有一个填写好的表格,可以保存到 coreData,然后在填写保存的字段的情况下恢复。除了保存在可转换文件中的 NSMutableIndexSet 之外,一切正常属性。除非我第二次保存,否则每次都可以很好地保存并重新加载,然后如果我重新加载页面,我会得到一个 NSLog:<NSMutableIndexSet: 0xe8b1800>(no indexes) 如果我重新运行应用程序,保存的数据会正确填写,直到我再次保存。

编辑:我想我真正的问题是为什么需要重新运行应用程序才能让我的 viewDidAppear 正常工作?有解决办法吗?

保存代码:

- (IBAction)save:(id)sender 
    NSManagedObjectContext *context = [self managedObjectContext];

    if ((self.form)||(formEdited)) 

    

    else 
        self.form = [NSEntityDescription insertNewObjectForEntityForName:@"CookingSupplement" inManagedObjectContext:context];
    
    // Update existing form
    [self.form setValue:@"Form 1" forKey:@"formType"];

    [self prepIndexSave:self.type.selectedSegmentIndexes secondMethod:self.type forKey:@"type" forIndexKey:@"typeIndexes"];

    NSLog(@"indexes being saved= %@", self.type.selectedSegmentIndexes);

      NSError *error = nil;
    // Save the object to persistent store
    if (![context save:&error]) 
        NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
    

    formEdited = YES;

NSLog 总是打印正在保存的正确索引。

辅助方法:

- (void)prepIndexSave:(NSIndexSet *)multiIndex secondMethod:(UISegmentedControl *)seg forKey:(NSString *)key forIndexKey:(NSString *)indexKey 
    NSMutableArray *array = [NSMutableArray array];
    [multiIndex enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) 
        [array addObject:@(idx)];
    ];


    NSMutableArray *titles = [NSMutableArray array];
    for (NSNumber *index in array) 
        [titles addObject:[seg titleForSegmentAtIndex:index.integerValue]];
    
    NSLog(@"new array::%@",titles);
    [self.form setValue:titles forKey:key];

    // now set indexes
    [self.form setValue:multiIndex forKey:indexKey];



viewDidAppear:

- (void)viewDidAppear:(BOOL)animated 
    [self.type setSelectedSegmentIndexes:[self.form valueForKey:@"typeIndexes"]];

    NSLog(@"form type indexes:%@", [self.form valueForKey:@"typeIndexes"]);


实施:

@property (strong, retain) NSManagedObject *form;
@property (strong, nonatomic) IBOutlet MultiSelectSegmentedControl *type;

此 NSLog 会打印正确的索引,直到推送保存并重新加载页面。这可以通过重新运行应用程序来纠正,然后它会加载并打印已保存的正确索引。 如果需要更多信息,请告诉我,我会添加。

【问题讨论】:

你能粘贴你的 viewWillAppear/viewDidAppear 和其他附带的方法吗? 糟糕 viewDidLoad 应该是 biewDidAppear 但这就是我所拥有的所有视图出现/加载我在 viewdidload 中评论了所有内容,但仍然存在同样的问题。 哪行代码输出带有“(无索引)”的 NSLog(...)? @ReyGonzales 在 vi​​ewDidAppear 中。当我第一次打开视图时,它会显示<NSMutableIndexSet: 0x868b450>[number of indexes: 1 (in 1 ranges), indexes: (1)] 之类的内容,但如果我单击保存按钮并单击返回,然后返回到我的表单,我会得到没有索引 为了更好地了解我所拥有的:我有一个表格视图,可以加载所有已启动的表单,从那里您可以单击已启动的表单,它会推送表单并从 coredata 加载保存的数据.当我保存然后推回并返回表单时,一切都正确加载,但这些索引 【参考方案1】:

我做到了!半天后,我发现将 NSMutableIndex 保存为可转换属性类型会导致问题并添加:

NSIndexSet *indexSet = [multiIndex copy];

我的辅助方法一切正常!

Link to Question and comment that helped solve this

【讨论】:

以上是关于视图控制器仅在第一次保存到 coredata 时填写我的表单的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 中使用 CoreData 从模态视图控制器重新加载视图

CoreData 保存问题

将屏幕截图保存到CoreData

Core Data 不保存对象而且速度很慢

为啥 CoreData 不保存任何东西?

XAF实现运行时填加验证规则并保存到数据库中