首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS CoreData 關聯:用 NSMutableSet 正確填充 NSSet 關係

     編輯:程式設計綜合問答

錯誤代碼

NSSet *selectedCategories = [NSSet set];
for (NSString *name in self.categories) {
    Category *cat = [NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:context];
    cat.name = name;
    [selectedCategories setByAddingObject:cat]; // 錯誤:NSSet 不可變,回傳新集合未保存
}
[self.delegate addCategoryViewControllerDidSelectCategory:self didSelectCategories:selectedCategories];

問題分析

  • NSSet 為不可變集合
  • setByAddingObject: 回傳新的 NSSet 實例,原變數 selectedCategories 仍指向空集合
  • 迴圈結束後傳遞的仍是空集合

正確做法:使用 NSMutableSet

NSMutableSet *selectedCategories = [NSMutableSet set];
for (NSString *name in self.categories) {
    Category *cat = [NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:context];
    cat.name = name;
    [selectedCategories addObject:cat]; // 直接修改可變集合
}
[self.delegate addCategoryViewControllerDidSelectCategory:self didSelectCategories:selectedCategories];

補充:CoreData 關係設定

若實體關係定義為 To-Many,直接對關係屬性賦值:

parentEntity.categories = selectedCategories; // NSSet 或 NSMutableSet 均可,CoreData 內部處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved