2013-12-16 3 views
2

Я полный новичок с Objective-C, так что медведь со мной. Я не ищу раздачу кода, но некоторые рекомендации о том, где искать ответы, будут оценены.Цель C: Методы не могут видеть друг друга?

Я - редактор кинофильмов, и я прототипировал небольшую утилиту на Python, которая читает список редактирования решений (который представляет собой текстовую плитку с временными кодами и различные другие части информации, относящиеся к редактированию видео) и анализирует файл на одну строку одновременно и извлекает определенную информацию для создания списка субтитров.

Как только я получил его на Python, я принял решительное решение перенести код в Objective-C, чтобы я мог распространять свою утилиту на другие редакторы как бинарный исполняемый файл.

Так много для предыстория, теперь вопрос ...

Прошлой ночью мне удалось построить GUI, который является простая кнопка для начала файла запрашивающего (для загрузки текстового файла) кнопку для конвертировать файл и кнопку для сохранения вновь преобразованного файла. Также есть объект текстового представления для отображения преобразованного файла. Мне удалось привязать все виджеты к новому классу, и я могу проверить, будет ли нажата каждая кнопка, и я могу вручную написать текст в виджет текстового вида. Пока все хорошо.

Проблема, с которой я сталкиваюсь, заключается в том, как передавать информацию от одного метода другому. В частности, если я открываю файл с использованием метода openFile, то как передать эту информацию методу convertFile? Когда я пытаюсь, я получаю сообщение, сообщающее мне, что мой openFile не определен. Я предполагаю, что все дело в инкапсуляции данных. Но это расстраивает, как черт, и я такой новичок, я даже не уверен, на что я должен смотреть ответы. Это было очень легко в Python: любой метод в данном классе, казалось, позволял без проблем переносить любой другой метод.

Чтобы вернуться, у меня есть открытие регистратора файлов, и я могу прочитать файл. Я могу даже разобрать его по строкам. Но это в своем собственном методе, и я не могу на всю жизнь понять, как передать эту информацию позже методу «конвертировать», а после этого передать переданный файл методу «сохранить».

Руководство многозначительно. Заранее спасибо.

Крис Конли

+0

Что вы подразумеваете под «информацией о пропуске»? Существует много разных способов передачи информации в ООП, так как я уверен, что вы знаете, что из Python. Возможно, вы имели в виду вызовы методов или экземпляры классов для использования позже? – CodaFi

+0

Спасибо, что потянулся. В частности, я вызываю метод, который открывает реквестер файлов и просто собирает путь и имя файла.Затем пользователь может нажать кнопку «Преобразовать файл», которая вызывает новый метод, и в этом методе я просто хотел бы узнать путь и имя файла из более раннего метода, чтобы я мог открыть файл и проанализируйте его. Сейчас я читаю объявления @property, и я думаю, что это то, что мне нужно. – ConleeC

ответ

-1

ObjC не все, что отличается от Python в этом отношении. На обоих языках данные могут быть связаны с объектом, локальным с функцией/методом или глобальным. Вы можете передавать данные напрямую из одного метода в другой в качестве аргументов или косвенно, сохраняя его где-нибудь, к которому имеют доступ оба метода (например, переменная экземпляра).

Для первых, вы могли бы сделать что-то вроде этого (гипотетическая реализация заполнены, так как я не знаю, что делать ваши методы):

@implementation MyClass //in the .m 
- (void) openFile:(NSString *)pathToFile { 
    NSData *fileData = [NSData dataWithContentsOfFile:pathToFile]; 
    [self convertFile:fileData]; 
} 

- (void) convertFile:(NSData *)fileData { 
    //whatever you wanted to do to fileData 
} 
@end 

Для последнего, вы должны были бы объявить хранение на объект для вещи, которую вы хотите сохранить, а также как получить доступ к хранилищу. Современный ObjC объединяет эти задачи с синтаксисом @property:

@interface MyClass : NSObject //in the .h 
@property (readwrite, strong) NSData *fileData; 
@end 

@implementation MyClass //in the .m 
- (void) openFile:(NSString *)pathToFile { 
    self.fileData = [NSData dataWithContentsOfFile:pathToFile]; 
} 

- (void) convertFile { 
    //whatever you wanted to do to self.fileData 
} 
@end 
+0

Спасибо за ответ. В частности, в моем скрипте Python моя кнопка «Получить EDL» просто открыла реквестер файлов и собрала путь и имя файла и отобразила указанный путь/имя файла в текстовом поле. Затем мой метод «Преобразовать файл» извлек ранее собранный путь/имя файла и начал разбор файла по одной строке за раз. Вот где начались мои головные боли ... От «getEDL»: NSURL * filePath = [[openDlg URLs] objectAtIndex: 0]; NSString * tempPath = filePath.path; Теперь я просто хотел бы открыть tempPath в моем методе конвертации. Кажется простым, но у меня болит голова. – ConleeC

+0

Это похоже на то, что вы хотите почти точно мой второй пример. Сохраните путь как свойство, получите доступ к этому свойству как self.propertyName в обоих методах. –

+0

Я изучаю @property прямо сейчас в книге Кочана, 5-е издание. Похоже на то, что я ищу. Будет отчитываться, когда я продвигаюсь вперед. Срыв; Я чувствую, что я делаю 1 шаг вперед, и 3/4 шаг назад каждый раз, когда я пытаюсь что-то новое. Но я доберусь туда. Спасибо за лидерство! – ConleeC

Смежные вопросы