2016-10-18 6 views
1

В настоящее время я конвертирую свои быстрые файлы в swift 3, и есть исключение во время выполнения, которое включает указатели. Вот код:Swift 3 - отправка указателя необязательно связанной переменной - iOS

var sectionChanges:NSArray? = nil 
var rowChanges:NSArray? = nil 

databaseView.getSectionChanges(&sectionChanges!, rowChanges: &rowChanges!, for: notifications, with: mappings) 

фатальная ошибка: неожиданно нашли ноль в то время как разворачивание необязательное значение

function signature specialization) ->() to @callee_owned (@unowned Swift.UnsafeBufferPointer) -> (@out()), Argument Types : [@callee_owned (@unowned Swift.UnsafeBufferPointer) ->()]> of generic specialization of Swift.StaticString.withUTF8Buffer ((Swift.UnsafeBufferPointer) -> A) -> A

EDIT: Определение getSectionChanges():

open func getSectionChanges(_ sectionChangesPtr: AutoreleasingUnsafeMutablePointer<NSArray>?, rowChanges rowChangesPtr: AutoreleasingUnsafeMutablePointer<NSArray>?, for notifications: [NSNotification], with mappings: YapDatabaseViewMappings) 

Пожалуйста, помогите ?!

+1

Можете ли вы переписать свой 'getSectionChanges', чтобы он просто возвращал кортеж с массивами изменений, вместо использования параметров' inout'? Поверьте мне, это сэкономит вам много времени и усилий в будущем. – user28434

+0

Откуда появляется 'getSectionChanges()' и как он определяется? –

+0

@ user28434 Это отличное предложение, проскользнуло мне на ум. Но не могу ли я отправить указатель на необязательную переменную ?! GAH Я ненавижу эти обновления. –

ответ

0

Инициирования опциональных переменного на что-то другое, чем ноль, кажется, помог. Отвечая на этот вопрос сам, на случай, если он может быть полезен кому-то другому.

var sectionChanges:NSArray? = NSArray() 
var rowChanges:NSArray? = NSArray() 

databaseView.getSectionChanges(&(sectionChanges)!, rowChanges: &(rowChanges)!, for: notifications, with: mappings) 
0

Как определение метода подразумевает: параметр AutoreleasingUnsafeMutablePointer? не будет принимать адрес объекта nil NSArray. Таким образом, вы должны использовать следующий код для вызова метода:

var sectionChanges = NSArray() 
var rowChanges = NSArray() 

databaseView.getSectionChanges(&sectionChanges, rowChanges: &rowChanges, for: notifications, with: mappings) 
+0

Дело в том, что в разделеChanges и rowChanges есть возможность назначить объект nil. –

 Смежные вопросы

  • Нет связанных вопросов^_^