首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在NSMutableSets中引用对象

如何在NSMutableSets中引用对象
EN

Stack Overflow用户
提问于 2014-03-07 23:10:05
回答 2查看 102关注 0票数 0

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

代码语言:javascript
运行
复制
@interface Appointment : NSObject  {
@public
    NSDate *apptStartTime;
    NSDate *apptEndTime;
    NSString *key;
}
@end

我编写的方法之一接受日期、一组日程(也是C# struct的端口)和约会列表(我使用的是包含上述约会接口的NSMutableSet )。如果我能让约会方法起作用,我很确定我能算出剩下的(我想)。这是将约会添加到NSMutableSet的代码

代码语言:javascript
运行
复制
-(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#结构的端口。我阅读了所有的苹果文档集,和几个文档,解释了C#和Obj之间的区别。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-07 23:51:09

而不是这样:

代码语言:javascript
运行
复制
@interface Appointment : NSObject  {
@public
    NSDate *apptStartTime;
    NSDate *apptEndTime;
    NSString *key;
}
@end

请写

代码语言:javascript
运行
复制
@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. 使用访问器,除非您有非常、非常好的理由不使用。
票数 0
EN

Stack Overflow用户

发布于 2014-03-07 23:44:48

看一看代码,我的印象是您不太确定您是在编写C++代码还是Objective代码。

代码语言:javascript
运行
复制
if(schedule.occursOnDate(checkDate))

如何再一次调用Objective方法?

代码语言:javascript
运行
复制
for(NSMutableSet *schedule in schedules)

这事你肯定吗?附表是一个NSMutableSet*。那么,您是说您的计划可变集的元素又是可变的集合吗?很不寻常,但如果你这么说.

代码语言:javascript
运行
复制
appt = [self generateAppointment:checkDate andSchedule: [schedules removeObject:schedules]];

这可真够奇怪的。你觉得是什么

代码语言:javascript
运行
复制
[schedules removeObject:schedules]

要做什么?您希望集合本身作为一个元素吗?

我的建议是上床睡觉。睡十个小时。吃完早餐后,再看看你的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22262494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档