#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»];