如何在NSMutableSets中引用对象

时间:2014-03-07 23:10:05

标签: objective-c struct nsmutableset

我有一个小型的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之间差异的文档。

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

2 个答案:

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

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

  3. 使用访问者,除非你有非常好的理由不这样做。