0

我有一个小型 C# 库,我正在尝试将其移植(实际上是使用它作为指南重写 C# 代码)到 Obj-C。该库的目的是为 iOS 日历应用程序生成定期约会。我在将 C# 结构移植到 Obj-C 对象时遇到问题。这是我对保存约会信息的结构之一所拥有的:

@interface Appointment : NSObject  {
@public
    NSDate *apptStartTime;
    NSDate *apptEndTime;
    NSString *key;
}
@end

我编写的其中一个方法接受一个日期、一组时间表(也是 C# 的一个端口struct)和约会列表(我使用的NSMutableSet是包含上述 Appointment 接口的)。如果我可以让约会方法起作用,我很确定我可以找出其余的(我认为)。这是将约会添加到的代码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# 结构的端口。我已经阅读了所有关于集合的 Apple 文档,以及一些解释 C# 和 Obj-C 之间差异的文档。

有人可以解释我做错了什么,或者指出一些好的文档可以给我一个在集合中引用元素的例子吗?

4

2 回答 2

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]

要去做?你期望一个集合将自己作为一个元素?

我的建议:去睡觉吧。睡十个小时。吃过一顿丰盛的早餐后,再看看你的代码。

于 2014-03-07T23:44:48.510 回答
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
  1. 不要公开实例变量。实例变量永远不应该在属于该类的代码之外直接访问。

  2. 始终使用下划线字符开始实例变量,例如 _startTime。这样,对实例变量的任何访问都会脱颖而出。(上面的代码将为您创建实例变量)。

  3. 除非您有非常非常好的理由不使用访问器,否则请使用访问器。

于 2014-03-07T23:51:09.223 回答