Tableview 中的 Xcode 核心数据
Posted
技术标签:
【中文标题】Tableview 中的 Xcode 核心数据【英文标题】:Xcode Core Data in Tableview 【发布时间】:2014-10-19 19:16:22 【问题描述】:我的应用在应用商店中,在更新到 ios 8 并在我的新 iphone 6 上测试该应用后,该应用无法正常运行。 我已经发现了问题:我在 nsuserdefaults 中存储了 3 维数组,它给了我错误:将对象发送到不可变...。 所以我可以忘记将 3d 数组存储在 nsuserdefaults 中,因为我无法真正更改它们。
我的想法是将所有数据存储在核心数据中。伟大的! 但我要学习! 所以.... 我有 5 个属性,如您在图像上看到的:
当按下添加按钮时,所有 5 个属性都由 sqlite 文件中的核心数据保存。 日期类型的属性“基准”来自日期选择器,因此我可以选择一个日期。其他属性是小时、分钟和一些音符 - 字符串。 所以,我想这样看我的表格视图:
2014 <--- sectiontitle with year
-October <--- rows cell.text
-November <--- rows cell.text
2015 <--- sectiontitle with year
-January <--- rows cell.text
-May <--- rows cell.text
在这个例子中,我在 2014 年 10 月 + 11 月和 2015 年 1 月 + 5 月输入了条目。 这意味着,这个表格视图是对所有数据的概述,我想在年份和月份中进行过滤。 这样做的最佳方法是什么。 有没有比以下更简单的方法:获取日期、将日期放入数组、设置 dateformatter 并找到不相等的日期来获取年份和月份? 因为,当推送一个单元格时,例如第 0 节中的 october,会打开一个详细视图,我想显示我在 2014 年 10 月所做的所有条目。
你有什么建议?请帮忙!!!
【问题讨论】:
您应该认真阅读与 Core Data 相关的所有内容。提示:NSPredicate
是你的朋友。还有NSFetchedResultsController
.
谢谢,在使用谓词过滤后,我将从我的日期对象中获取年份和/或月份。但是如何将属性 vorlagen 与日期相关联。字符串如何知道它的关联。
【参考方案1】:
如果用户默认值足以满足您的需求,我会坚持使用它,但在您阅读时将数据转换为可变的东西。您可以使用CFPropertyListCreateDeepCopy
将不可变属性列表转换为可变属性列表。顾名思义,它是一个深拷贝,您可以让它将可变容器和/或叶子转换为可变等价物。
如果您从用户默认值读取到NSDictionary *userDefaultsData
,请转换为
NSDictionary *mutableData = CFPropertyListCreateDeepCopy(NULL, userDefaultsData, kCFPropertyListMutableContainers);
这将递归地复制整个内容,将NSDictionary
转换为NSMutableDictionary
并将NSArray
转换为NSMutableArray
。
【讨论】:
谢谢汤姆!我会在接下来的几天里试试这个!如果我理解正确,当我使用 deepcopy 时,我可以以“正常”方式使用数组或字典,而无需使用 [array mutablecopy]; ? 在 appdelegate 中:这是我的数组之一--->stdPickerArray = [[NSMutableArray alloc] initWithArray:[def objectForKey:@"gesamtStdArray"]];
这是我的字典,例如----> _dict = [NSDictionary dictionaryWithObjectsAndKeys:stdPickerArray, @"stdDict",nil];
[def registerDefaults:_dict]; [定义同步];那我应该把我的字典换成你说的那个吗?【参考方案2】:
再次感谢汤姆,你让我免于繁重的工作!!!
在 appdelegate 中我改变了...
stdPickerArray= [[NSMutableArray alloc] initWithArray:[def objectForKey:@"gesamtStdArray"]];
到...
stdPickerArray= [[NSMutableArray alloc] initWithArray:[def objectForKey:@"gesamtStdArray"]];
stdPickerArray = CFBridgingRelease(CFPropertyListCreateDeepCopy(NULL, (CFPropertyListRef)stdPickerArray, kCFPropertyListMutableContainers));
太棒了!!!
【讨论】:
以上是关于Tableview 中的 Xcode 核心数据的主要内容,如果未能解决你的问题,请参考以下文章
RestKit - 无法在我的 tableView 上显示 JSON 数据