我有一个小型的C#库,我试图将它(实际上是用C#代码作为指南重新编写)到Obj-C。该库的目的是为iOS日历应用程序生成定期约会。我在将C#结构移植到Obj-C对象时遇到问题。这就是我拥有约会信息的结构之一:
@interface Appointment : NSObject {
@public
NSDate *apptStartTime;
NSDate *apptEndTime;
NSString *key;
}
@end
我写的一个方法接受一个日期,一组时间表(也是一个C#struct
的端口)和约会的列表(我正在使用包含约会界面的NSMutableSet
以上)。如果我可以让约会方法起作用,我很确定我能弄明白其余的(我想)。这是将约会添加到NSMutableSet
:
-(void) addAppointmentsForDate:(NSDate *)checkDate andSchedules: (NSMutableSet *)schedules andAppt:(NSMutableSet *)appointments {
Appointment *appt = [[Appointment alloc]init];
for(NSMutableSet *schedule in schedules) {
if(schedule.occursOnDate(checkDate)) {
appt = [self generateAppointment:checkDate andSchedule: [schedules removeObject:schedules]];
[appointments addObject: appt];
}
}
}
-(Appointment *) generateAppointment: (NSDate *) checkDate andSchedule: (Schedule *) schedule {
Appointment *appt = [[Appointment alloc]init];
appt->apptStartTime = schedule->timeOfAppointment;
appt->apptEndTime = nil; // TODO
appt->key = schedule->key;
return appt;
}
我在if
声明中遇到了构建错误:
将'void'发送到不兼容类型'Schedule *'
的参数
我以前从未使用NSMutableSets
,也没有尝试过使用C#。正如你所看到的,我正在使用C#struct的端口。我已经阅读了所有关于集合的Apple文档,以及几个解释C#和Obj-C之间差异的文档。
有人可以解释一下我做错了什么,或者指出一些好的文档可以给我一个引用集合中元素的例子吗?
答案 0 :(得分:0)
查看代码,我的印象是您不确定是否正在编写C ++或Objective-C代码。
if(schedule.occursOnDate(checkDate))
您如何再次调用Objective-C方法?
for(NSMutableSet *schedule in schedules)
你确定吗? schedules是一个NSMutableSet *。所以你说你的日程表可变集的元素又是可变集吗?这是非常不寻常的事情,但如果你这么说......
appt = [self generateAppointment:checkDate andSchedule: [schedules removeObject:schedules]];
这不仅仅是奇怪的。您认为是什么
[schedules removeObject:schedules]
要去做什么?你期望一个集合将自己作为一个元素?
我的建议:上床睡觉。有十个小时的睡眠。享用完美味的早餐后,再次查看您的代码。
答案 1 :(得分:0)
而不是:
@interface Appointment : NSObject {
@public
NSDate *apptStartTime;
NSDate *apptEndTime;
NSString *key;
}
@end
请写一下
@interface Appointment : NSObject
@property (readwrite, nonatomic, strong) NSDate* startTime;
@property (readwrite, nonatomic, strong) NSDate* endTime;
@property (readwrite, nonatomic, strong) NSString* key;
@end
不要公开实例变量。永远不应该在属于该类的代码之外直接访问实例变量。
始终使用下划线字符启动实例变量,例如_startTime。这样,对实例变量的任何访问都很突出。 (上面的代码将为您创建实例变量)。
使用访问者,除非你有非常好的理由不这样做。