Если вы вставили этот код в порядке, указанном в исходном коде, и newBoundsFromBounds: forHandle: withDelta: не объявлен (в отличие от определения) в какой-то более ранний момент, я думаю, что проблема заключается в том, что при nb= [self newBoundsFromBounds: ... компилятор еще не знает, какой будет тип возвращаемого значения.NSRect - это структура в стиле C, а не класс Objective-C, поэтому компилятору действительно нужно знать.
В качестве решения либо поместите определение newBoundsFromBounds: ... before mouseDragged :, addэто к @interface в вашем заголовочном файле, если вы хотите, чтобы он был открыт для всех или объявлен внутри файла реализации как метод категории.Чтобы сделать последний, добавьте следующее в начало вашего .m, предполагая, что ваш класс называется WikiDrawsView:
@interface WikiDrawsView (private)
- (NSRect)newBoundsFromBounds:(NSRect) old
forHandle:(int) whichOne
withDelta:(NSPoint) p;
@end
«private» - это просто имя, которое вы выбираете, оно не имеет специальногоимея в виду.Нечто вроде «private» часто используется для обозначения того, что вы используете категорию аналогичным образом, что вы можете использовать функции-члены частного класса в C ++ или в таком языке.
Быстрый способ описания категорийчтобы они добавляли дополнительные методы к существующим классам во время выполнения и использовали синтаксис @interface [classname] ([category name]) без секции переменных-членов.Я уверен, что ваш учебник дойдет до них, документация Apple на них здесь .Это обычное использование категорий, но не основное использование.