ios - 从单个单位数组构建 NSCalendarUnit 值

标签 ios objective-c macos cocoa cocoa-touch

我正在尝试计算某个 NSDate 之前的年数/天数/分钟数等。我在做:

NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitWeekOfYear | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate:[NSDate date] toDate:date options:0];

我试图让用户选择他们想要查看的组件。假设我有一个包含他们想要的 NSCalendarUnitYearNSCalendarUnitMinute 的数组。我如何将它们连接到 (NSCalendarUnitYear | NSCalendarUnitMinute) 中?

我试过:

NSCalendarUnit *units;
for (NSCalendarUnit *unit in arrayOfUnits) {
    units = units | unit;
}

但这不编译。有什么想法吗?

最佳答案

NSCalendarUnit 不是一个对象,它是一个枚举;您不能将一个存储在 NSArray 中。您可以将它包装在存储在数组中的 NSNumber 中,但是您必须在尝试执行按位运算之前将其解包。

看起来像这样:

NSNumber * userUnitNumber = @(userChosenCalendarUnit);

[arrayOfUnits addObject:calUnitNumber];

// Initialize this to zero or it will contain garbage 
// and you'll get bizarre results!
NSCalendarUnit finalUnits = 0;

for( NSNumber * unitNumber in arrayOfUnits ){
    // The datatype for an NSCalendarUnit is NSUInteger
    finalUnits |= [unitNumber unsignedIntegerValue];
}

但我不确定为什么您不只是在从用户那里获得输入时建立最终值;首先似乎没有任何理由将这些东西放在一个数组中。位掩码在更小的空间内包含与数组一样多的信息(这是它存在的全部原因)。

关于ios - 从单个单位数组构建 NSCalendarUnit 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26395907/

相关文章:

mysql - 我无法在 mac 上登录 mysql 服务器

ios - 终止在后台运行的应用程序

ios - archivedDataWithRootObject : on 32 bit app, unarchiveObjectWithData:在 64 位应用程序上

iphone - MKMapView renderInContext - iPhone 4 (Retina) 问题

objective-c - 检查它是否相等,Normal int 和 #define 宏。但它不起作用

macos - (Cocoa) NSScrollView 与 IKImageBrowserView 滚动到底部

ios - 在内存限制下调整 UIImage 的大小

ios - 如何获取罗马数字字符串并将其转换为 base10 数字?

iphone - 在objective-c中检测图像的拍摄位置(位置)

objective-c - 向 NSOutlineView 添加标签元素