gpt4 book ai didi

ios - 谓词,从 NSDate 按年份过滤,生成零日期和讽刺的 Xcode 错误

转载 作者:行者123 更新时间:2023-11-29 03:26:48 25 4
gpt4 key购买 nike

我有一个简单的应用程序:用户在 UIDatePicker 中选择一个日期并填写一些字段并通过核心数据保存, TableView Controller 应该只显示在日期选择器中选择的年份列表.如果某人选择了 1 个年份为 2013 年的日期,然后选择了另一个年份,则 TableView 中应该只有 1 个 2013 年条目。

我有用于重复检查的后端逻辑。我的问题是 FetchedResultsController 中此 TableView Controller 上的实际谓词。这导致我的日期为零,Xcode 也给我一条幽默的消息!

date cannot be nil
I mean really, what do you think that operation is supposed to mean with a nil date?
An exception has been avoided for now.
A few of these errors are going to be reported with this complaint, then further violations will simply silently do whatever random thing results from the nil.

执行谓词的代码是:

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit ) fromDate:self.date.dateOfEvent];
//create a date with these components
NSDate *startDate = [calendar dateFromComponents:components];
[components setYear:components.year]; //reset the other components

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"dateOfEvent == %@",startDate];
NSLog(@"New Date = %@", startDate);

我有一个名为 date 的 Date 实体属性,dateOfEvent 属性是 NSDate,我正试图在关闭的那一年中提取它!

NSLog 给我 2001-01-01 00:00:00 +0000 所以它显然没有得到那个日期。

如果有人能够协助 a) 为什么我有效地得到一个 nil 日期和 b) 关于 Xcode 错误的想法和 c) 我将如何更新 cellForRow 以仅显示年份?

谢谢!

最佳答案

首先,self.date.dateOfEvent 很可能为零。这就是讽刺性错误消息所表明的内容。但是,您的日志消息似乎包含有效的年份,因此也许使用调试器单步执行代码会有所帮助。

第二,
[components setYear:components.year]
相同components.year = Components.year 绝对不执行任何操作。仅包含年的组件中的日期将没有月、日、小时等(它们都为零)。

第三,只有当数据库中的日期完全相同(精确到秒)时,谓词才会返回一个值,但情况可能并非如此。假设您要查看某一年,您需要构造一个日期间隔来查找相关记录。

NSInteger year = 2011;
NSDateComponents *components = [[NSDateComponents alloc] init];
components.year = year;
NSDate *startOfYear = [[NSCalendar currentCalendar] dateFromComponents:components];
components.year = 1; // (one year)
NSDate *endOfYear = [[NSCalendar currentCalendar] dateByAddingComponents:components
toDate:startOfYear options:0];

然后使用这样的谓词:

[NSPredicate predicateWithFormat:
@"dateOfEvent > %@ && dateOfEvent <= %@", startOfYear, endOfYear];

关于ios - 谓词,从 NSDate 按年份过滤,生成零日期和讽刺的 Xcode 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20369731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com