Ошибки компиляции в xCode 7 + Swift 2.0

Поскольку я установил xCode 7 beta2 + Swift 2.0, я получаю некоторые ошибки в своем приложении. Например, я получаю следующую ошибку

«Не удается вызвать «requestAccessToEntityType» со списком аргументов типа «(EKEntityType, завершение: (Bool, NSError!) -> _)»

в этой части кода:

eventStore.requestAccessToEntityType(EKEntityType.Event,
    completion: {(granted: Bool, error:NSError!) in
            if !granted {
                print("Access to store not granted")
            }
    })

Также эта ошибка:

Не удается вызвать predicateForEventsWithStartDate со списком аргументов типа "(NSDate, endDate: NSDate, календари: [AnyObject])"

в этой части кода:

calendarsPrueba.addObject(calendarWithName("US Holidays")!)
var predicate2 = eventStore.predicateForEventsWithStartDate(startDate, endDate: endDate, calendars: calendarsPrueba as [AnyObject])

Кто-нибудь знает, как решить эту проблему? Документации Apple по этому поводу нет.


person Ruben    schedule 27.06.2015    source источник
comment
Вы запускали миграцию?   -  person HAS    schedule 27.06.2015


Ответы (2)


Тот же вопрос, что и у @HAS - вы запустили миграцию? Множество несовместимых изменений между Swift 1.2 и Swift 2.0. Код должен быть перенесен или исправлен вручную.

requestAccessToEntityType

Ошибка ...

Не удается вызвать «requestAccessToEntityType» со списком аргументов типа «(EKEntityType, завершение: (Bool, NSError!) -> _)»

... существует, потому что ваш тип (Bool, NSError!) -> Void вместо (Bool, NSError?) -> Void. Замените NSError! на NSError?, чтобы исправить это.

Проверьте документацию, подпись:

typealias EKEventStoreRequestAccessCompletionHandler = (Bool, NSError?) -> Void

predicateForEventsWithStartDate

Не удается вызвать predicateForEventsWithStartDate со списком аргументов типа "(NSDate, endDate: NSDate, календари: [AnyObject])"

Подпись:

func predicateForEventsWithStartDate(_ startDate: NSDate,
  endDate endDate: NSDate,
  calendars calendars: [EKCalendar]?) -> NSPredicate

Со своим as [AnyObject] вы пытаетесь пройти [AnyObject] вместо [EKCalendar]. Чтобы исправить это, объявите calendarsPrueba как:

var calendarsPrueba: [EKCalendar]

И не бросайте его на [AnyObject].

Кто-нибудь знает, как решить эту проблему? Документации Apple по этому поводу нет.

Там есть. Всегда читайте примечания к выпуску, где вы можете найти сводку всех изменений. А затем перепроверьте документацию, потому что, как я уже писал, вы можете найти много существенных изменений между Swift 1.2 и Swift 2.0.

person zrzka    schedule 03.07.2015

это работает с Xcode 7/swift 2:

final func addToCalendar(){

    let eventStore = EKEventStore()
    eventStore.requestAccessToEntityType(EKEntityType.Event, completion: { (granted, error) in
        if !granted {
            // Show alert...
            print("Access not allowed")
            print(error!.localizedDescription)
        }
        else {
            print("Access granted")
            let event = EKEvent(eventStore: eventStore)
            let uuid = NSUUID().UUIDString
            event.title = "sample Event " + uuid
            event.startDate = NSDate();
            event.endDate = event.startDate.dateByAddingTimeInterval(60*60)
            event.calendar = eventStore.defaultCalendarForNewEvents

            do {
                try eventStore.saveEvent(event,  span: .ThisEvent)
            } catch let error as NSError {
                print(error.localizedDescription)
            }
        }
    })
person ingconti    schedule 09.11.2015