Как ссылаться на объекты в NSMutableSets

У меня есть небольшая библиотека 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#, как вы можете видеть. Я прочитал все документы Apple по сетам и несколько документов, объясняющих различия между C# и Obj-C.

Может кто-нибудь, пожалуйста, объясните, что я делаю неправильно, или укажите мне несколько хороших документов, которые могут дать мне пример ссылки на элементы в наборах?

2 ответа

Решение

Вместо этого:

@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. Используйте аксессоры, если у вас нет очень веских причин не делать этого.

Глядя на код, у меня складывается впечатление, что вы не совсем уверены, пишете ли вы код на C++ или Objective-C.

if(schedule.occursOnDate(checkDate))

Как вы снова вызываете метод Objective-C?

for(NSMutableSet *schedule in schedules)

Вы в этом уверены? расписаний является NSMutableSet*. То есть вы говорите, что элементы вашего изменяемого набора расписаний снова являются изменяемыми наборами? Это довольно необычно, но если вы так говорите...

appt = [self generateAppointment:checkDate andSchedule: [schedules removeObject:schedules]];

Это более чем странно. Что вы думаете

[schedules removeObject:schedules]

собираюсь сделать? Вы ожидаете, что набор будет иметь себя как элемент?

Мой совет: ложись спать. Имейте десять часов сна. После хорошего завтрака снова посмотрите код.

Другие вопросы по тегам