0

所以这对我来说有点奇怪,但我有一个填写好的表格,可以保存到 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 打印正确的索引,直到保存被推送并重新加载页面。这可以通过重新运行应用程序来纠正,然后它会加载并打印已保存的正确索引。如果需要更多信息,请告诉我,我会添加。

4

1 回答 1

0

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

NSIndexSet *indexSet = [multiIndex copy];

对于我的辅助方法,一切正常!

链接到有助于解决此问题的问题和评论

于 2013-07-22T17:29:32.083 回答