Как я могу перейти через [messages] в приложениях XCode / Objective-C для iOS? - PullRequest
1 голос
/ 03 августа 2011

Обновление: Кажется, есть проблема с наличием метода, который возвращает double / float, и пытается вступить. Так как я смог войти в setOperand, но не preformOperation, я попытался изменить preformOperation на - (void) с - (double), и все заработало, как и ожидалось. Играя с вещами немного больше, я попробовал (int), (float) и (id).

(int) и (id) позволили мне войти в метод без каких-либо проблем. (float) однако продемонстрировал то же поведение, что и (double), где xcode просто перешагнет черту, а не позволит мне войти в нее.

У кого-нибудь есть мысли о том, почему это происходит?

Оригинал: Недавно я решил заняться программированием на Obj-C / iOS, и я немного застрял при попытке пошагово пройти код.

Если у меня есть следующие методы в мозге:

//CalcBrain.h
@interface CalcBrain : NSObject {
double operand;
NSString * waitingOperation;
double waitingOperand;
}
- (void)setOperand:(double)anOperand;
- (double)performOperation:(NSString *)operation;
@end

А в контроллере вида:

//CalcViewControl.m
...
- (CalcBrain *)brain
{    
    if(!brain)
        brain = [[CalcBrain alloc] init];
    return brain;
}
...   
- (IBAction)operationPressed:(UIButton *)sender
{
    if(inMiddleOfOps)
    {
            [[self brain] setOperand:[[display text] doubleValue]];
            inMiddleOfOps = NO;
    }
    NSString *operation = [[sender titleLabel] text];
    double result = [[self brain] performOperation:operation];

   [display setText:[NSString stringWithFormat:@"%g", result]];
}
...

Если я установлю точку останова на: double result = [[self brain] performOperation:operation];

А потом "пошагово", я увижу, как он входит в раздел кода [self brain] в CalcViewControll.m, однако, как только я вернусь из этого раздела, он перейдет прямо к следующей строке. Исходя из фона C / C ++, это не то поведение, которого я ожидал, вместо этого я думал / надеялся, что он направится в CalcBrain.m и позволит мне пройти через performOperation метод внутри "мозга".

Я могу получить эту функциональность, если добавлю точку останова в первой строке метода performOperation - однако это не идеально.

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

редактирование:

[Я. мозг] не ноль.

Я запускаю / собираю в конфигурации отладки (оптимизация не установлена).

Я пытался разбить данную строку на две отдельные строки, но все равно не работает, как ожидалось.

Ответы [ 2 ]

1 голос
/ 03 августа 2011

[Я. мозг] не возвращается ноль случайно.

1 голос
/ 03 августа 2011

Вы должны просто иметь возможность снова нажать "шаг в", пока он все еще находится на этой линии.Он должен работать так, как вы ожидаете - когда в строке есть несколько вложенных вызовов (как в вашем примере - метод доступа - это один метод, а -performOperation: - другой), поведение "шаг в" перейдет к нимв порядке их исполнения.Они вернутся, а затем перейдут к следующему.

Вы уверены, что не нажмете кнопку "Перешагнуть", когда вернетесь к аксессору -brain?

Еслион действительно работает не так, как должен, может быть, вы отлаживаете сборку релиза или какой-то другой двоичный файл, который значительно оптимизирован, и вы видите обычную путаницу, с которой сталкивается отладчик при переходе с исходного кода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...