Предупреждения в Objective c при вызове метода

#objective-c #pointers #methods #casting #warnings

#objective-c #указатели #методы #Кастинг #предупреждения

Вопрос:

Я думаю, на это будет довольно простой ответ, я просто озадачен тем, как избавиться от этих предупреждений.

Я получаю ‘DebugZoneLayer’, возможно, не отвечает на ‘-getGID:tileKind’, и инициализация преобразует целое число из указателя без приведения, когда я выполняю этот вызов метода:

 int blocksCollidableGID  = [debugZoneLayer getGID:[NSValue valueWithCGPoint:(NSString*)tileCoord] tileKind:@"blocksCollidable"];
  

В котором я перепробовал все различные комбинации приведения этих типов значений.

В DebugZoneLayer.h У меня есть:

 -(int) getGID:(CGPoint)tileCoord withTileKind:(NSString*)tileKind;
  

Спасибо

Комментарии:

1. Вы действительно #импортировали DebugZoneLayer.h ? Кроме того, первый аргумент имеет тип CGPoint , но вы делаете что-то очень неправильное: вы передаете указатель на NSValue вместо этого, и в вызове на valueWithCGPoint: , который ожидает CGPoint, вы приводите что-то к указателю на NSString ? Двойной ой.

2. NSValue — это ObjC-объект, а CGPoint — структура.

3. Да, я импортировал DebugZoneLayer.h. Я ожидал, что то, что я делал, было очень ой, да.

4. Итак .. я все еще не определился с ответом здесь. Кто-нибудь?

Ответ №1:

Также первым параметром не должно быть NSValue, это должна быть CGPoint.

Ответ №2:

септи прав насчет опечатки селектора, но, похоже, есть и некоторые дополнительные проблемы.

  • -valueWithCGPoint: занимает, ну, CGPoint . Приведение к (NSString *) неверно. Что такое tileCoord ?
  • Объявлено, что первый параметр принимает значение CGPoint , а не NSValue an, так что упаковка не кажется необходимой в первую очередь.

Комментарии:

1. Я должен был упомянуть, что … tileCoord — это CGPoint.

2. Итак, если в боксе нет необходимости, я на пути записи для написания этого таким образом? int blocksCollidableGID = [debugZoneLayer getGID:[CGPoint valueWithCGPoint:tileCoord] с tilekind:@»blocksCollidable»]; И как бы вы это сделали без упаковки?

3. Попробуйте это: [debugZoneLayer getGID:tileCoord withTileKind:@"blocksCollidable"]; . «Бокс», о котором я говорил, — это -valueWithCGPoint: бит. Если метод принимает CGPoint , а у вас есть CGPoint , то просто передайте его, вместо того, чтобы упаковывать в NSValue .

Ответ №3:

Очевидно, что это должно быть с помощью tilekind вместо tileKind.

Редактировать: я имею в виду эту строку 😉

 int blocksCollidableGID  = [debugZoneLayer getGID:[NSValue valueWithCGPoint:(NSString*)tileCoord] withTileKind:@"blocksCollidable"];
  

Редактировать:

итак, теперь вы избавились от предупреждения. Теперь компилятор обнаруживает некоторые другие ошибки, подобные уже упомянутым. Поскольку вы, похоже, застряли на этом этапе, я попытаюсь угадать, что делать.

Вы упомянули, что tileCoord является точкой CG. Таким образом, в любом случае нет абсолютно никакой необходимости приводить или преобразовывать его. Попробуйте эту строку кода:

 int blocksCollidableGID  = [debugZoneLayer getGID:tileCoord withTileKind:@"blocksCollidable"];
  

и посмотрите, есть ли другие ошибки.

Комментарии:

1. Даже после изменения его на CGPoint я получаю сообщение об ошибке CGPoint не является именем класса Objective-C. То, что я написал, это int blocksCollidableGID = [getGID debugZoneLayer:[Значение CGPoint с CGPoint:(NSString *)tileCoord] с tilekind:@»blocksCollidable»];

2. Прочитайте другие ответы, у вас также есть другие ошибки в вашем коде, которые обнаруживаются, когда вы решаете проблему с предупреждением, как я вам говорил.

3. Хорошо, теперь я понимаю, что написанная вами строка не пыталась показать правильный способ ее написания. Я действительно не знаю, что здесь делать. Та же ошибка с int blocksCollidableGID = [getGID отладочного слоя:[CGPoint valueWithCGPoint:tileCoord] с tilekind:@»blocksCollidable»];

4. Да, я только указал, как удалить предупреждение, о котором вы просили. После этого компилятор находит метод, но вы получаете ошибки из-за других допущенных вами ошибок.

5. Вы опубликовали что-то, что избавляет от предупреждений, но теперь выдает ошибки?

Ответ №4:

Нет приведения, необходимого ни для tileCoord, ни для tileKind

int blocksCollidableGID = [getGID debugZoneLayer:tileCoord с tilekind:@»blocksCollidable»];