【问题标题】:Add objects in relationship not work using MagicalRecord saveWithBlock使用 MagicalRecord saveWithBlock 添加关系中的对象不起作用
【发布时间】:2014-06-10 03:22:02
【问题描述】:

执行保存块的代码:

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
    for (NSDictionary *stockDict in objects) {
        NSString *name = stockDict[@"name"];
        Stock *stock = [Stock MR_createInContext:localContext];
        stock.name = name;

        NSArray *categories = stockDict[@"categories"];
        if ([categories count] > 0) {
            for (NSDictionary *categoryObject in categories) {
                NSString *categoryId = categoryObject[@"_id"];
                NSPredicate *predicate = [NSPredicate predicateWithFormat:@"categoryId == %@", categoryId];
                NSArray *matches = [StockCategory MR_findAllWithPredicate:predicate inContext:localContext];
                NSLog(@"%@", matches);
                if ([matches count] > 0) {
                    StockCategory *cat = [matches objectAtIndex:0];
                    [stock addCategoriesObject:cat];
                }
            }
        }
    }
} completion:^(BOOL success, NSError *error) {
    
}];

库存模型:

@class StockCategory;

@interface Stock : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *categories;

@end

@interface Stock (CoreDataGeneratedAccessors)

- (void)addCategoriesObject:(StockCategory *)value;
- (void)removeCategoriesObject:(StockCategory *)value;
- (void)addCategories:(NSSet *)values;
- (void)removeCategories:(NSSet *)values;

@end

StockCategory 模型:

@class Stock;

@interface StockCategory : NSManagedObject

@property (nonatomic, retain) NSString * categoryId;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *stocks;
@end

@interface StockCategory (CoreDataGeneratedAccessors)

- (void)addStocksObject:(Stock *)value;
- (void)removeStocksObject:(Stock *)value;
- (void)addStocks:(NSSet *)values;
- (void)removeStocks:(NSSet *)values;

@end

json 看起来像这样:

[
  {
    "name": "iPad mini ",
    "categories": [
      {
        "name": "iPad",
        "_id": "538c655fae9b3e1502fc5c9e",
        "__v": 0,
        "createdDate": "2014-06-02T11:51:59.433Z"
      }
    ],
  },
  {
    "name": "iPad Air ",
    "categories": [
      {
        "name": "iPad",
        "_id": "538c655fae9b3e1502fc5c9e",
        "__v": 0,
        "createdDate": "2014-06-02T11:51:59.433Z"
      }
    ],
  }
]

打开core data pro,你可以看到只有名字为“iPad air”的股票已经保存了它的分类。我只是想不通为什么。你可以在saveWithBlock部分看到,我首先在上下文中找到与json中相同的_id,然后在关系中添加类别对象。它有效,但不是全部。这是为什么?

【问题讨论】:

    标签: ios core-data magicalrecord


    【解决方案1】:

    看起来您需要更改数据模型以允许类别与 Stock 实体具有一对多关系。当您具有一对一关系时,您的代码将替换现有关系。

    【讨论】:

    • 我与 Stock > 类别有关系。但他们都没有逆。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多