我正在尝试将UILabel的文本设置为等于NSDateComponents中表示的星期几的名称。我使用以下代码:
NSDateComponents *dateComponents = [[[NSDateComponents alloc] init] autorelease];
dateComponents.weekday = 1; //Sunday
NSString * const weekdayNames[8] = {@"Array starts at 1", @"Sunday", @"Monday", @"Tuesday", @"Wednesday", @"Thursday", @"Friday", @"Saturday"};
UILabel *myLabel = [[[UILabel alloc] init] autorelease];
myLabel.text = weekdayNames[dateComponents.weekday]; //compiler error: Assignment of read-only variable 'prop.49'
我可以通过以下三种方式使代码工作:
但我想知道为什么我的代码原本写的会失败。
答案 0 :(得分:0)
您没有正确初始化NSDateComponents,因此工作日不会返回您期望的值。请参阅the documentation。
现在您可以使用当前日期对其进行初始化:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents = [gregorian components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
int weekday = [weekdayComponents weekday];
稍后编辑:初始化是问题的一部分,以修复编译器错误更改:
NSString * const weekdayNames[8] =
到
NSString const * weekdayNames[8] =
(指向常量NSString的指针)。
然而,当你这样做时,你会发出警告“传递'setText:'的参数1'从指针目标类型”中丢弃限定符,因为你传递了一个指向期望函数的常量指针一个指针。要修复警告,可以将参数转换为setText为(NSString *)。
完全删除const限定符可能是有意义的。 NSStrings在Objective-C中已经是不可变的,因此它们已经是常数。