2014-12-23 5 views
-1

Я перехожу к другому WKInterfaceController, когда выбрана строка, но я не могу передать rowIndex в качестве контекста для моего нового контроллера, который я хотел бы сделать.Несовместимое целое число с конверсией преобразования указателя nsinteger

// Push to next controller and pass rowIndex as context 
- (void)table:(WKInterfaceTable *)table didSelectRowAtIndex:(NSInteger)rowIndex { 
    [self pushControllerWithName:(NSString *)@"ZoomPokeController" 
         context:rowIndex]; 
} 

Этот код дает ошибку

несовместимого целое число преобразования указателя отправки NSInteger: неявное преобразование 'NSInteger' (он же 'INT') в 'ид' недопустимую с ARC.

Я могу изменить свой context на ноль, и сборка завершается успешно, но, конечно, у меня нет контекста. Я взглянул на документацию по классу, которая очень помогла мне до сих пор, и подобные вопросы о stackoverflow, но я застрял, не зная, как это записать. Спасибо за любую помощь.

+0

в вашем методе '[self pushControllerWithName: (NSString *) @" ZoomPokeController "context: rowIndex]' что такое тип данных контекста? – iHulk

+0

@Mr. Slowpoke может совместно использовать подпись селектора pushControllerWithName? –

+0

Голосование закрывается как неясное. Ссылка на WKInterfacetable отсутствует. Нет информации о том, что такое контекст. – Droppy

ответ

2

Ошибка

"implicit conversion of 'NSInteger' (aka 'int') to 'id' is disallowed with ARC." 

ясно говорит, что вы передаете NSInteger в качестве параметра, где в качестве способа его предположим, что это id.

В нижней строке требуется второй параметр id объект.

[self pushControllerWithName:(NSString *)@"ZoomPokeController" context: rowIndex]; 

С помощью @ fabian789, ясно теперь, что в WKInterfaceController Class Reference

этот метод требуется id объект в качестве второго параметра.

enter image description here

Чтобы передать целое есть, вы можете конвертировать ваши NSInteger в NSNumber и передать в качестве второго параметра.

- (void)table:(WKInterfaceTable *)table didSelectRowAtIndex:(NSInteger)rowIndex { 
    NSNumber *rowValue = [NSNumber numberWithInteger:rowIndex]; 
    [self pushControllerWithName:@"ZoomPokeController" context: rowValue]; 
} 

Вы можете в целевом контроллере получить индекс строки, вызвав integerValue от контекста.

+1

Да! Это очень помогло, спасибо. Я NSLog'd мой контекст в новом интерфейсном контроллере и получил ожидаемые значения. Ура. –

+0

FYI '-pushControllerWithName: context:' это метод 'WKInterfaceController' и не может быть изменен. [Документы] (https://developer.apple.com/library/prerelease/ios/documentation/WatchKit/Reference/WKInterfaceController_class/index.html#//apple_ref/occ/instm/WKInterfaceController/pushControllerWithName:context :). – fabian789

+0

Спасибо @ fabian789 - Мое предположение было правильным. – Kampai

0

Ошибка ясно сказано, что вы делаете неправильно, вы отправляете тип NSInteger только целое число, попробуйте объявить параметр контекста как NSInteger или использовать его как это,

[self pushControllerWithName:(NSString *)@"ZoomPokeController" context: (int)rowIndex]; 

но ранее метод более эффективен

1

Вы отправляете неправильный тип параметра. В ролях rowIndex к int Попробуйте это:

- (void)table:(WKInterfaceTable *)table didSelectRowAtIndex: (NSInteger) rowIndex { 

    NSNumber *val = [NSNumber numberWithInteger: rowIndex] 
    [self pushControllerWithName:@"ZoomPokeController" context: val]; 
} 

Надежда эта помощь ... :)

+0

Спасибо за ответ. заменив мой код на это, но я все еще получаю две ошибки с этим.Неявное преобразование int в id запрещается с ARC и несовместимым целым числом с преобразованием указателя, переводящим 'int' в параметр типа 'id'. Если я прокручиваю до - (void) awakeWithContext: (id) context {и switch (id) в (int) или (NSInteger), я также получаю сообщение об ошибке. Возможно, я нашел чужой код для использования в качестве примера на https://github.com/leiyong316/AppleWatchDemo/blob/master/TestWatch%20WatchKit%20Extension/InterfaceController.m, поэтому я попытаюсь изучить это. Спасибо. –

+0

@ Mr.Slowpoke> См. Мое редактирование. – Rashad