2012-06-01 2 views
9

Как определить метод, который можно вызывать из любого места, в каждом классе viewcontroller?iOS: Как определить публичные методы?

У меня есть метод, который приносит мне json-файл, и я хочу, чтобы он был повторно использован, так как у меня есть несколько вызовов json в моем приложении.

Вы можете мне помочь?

+0

Singleton http://en.wikipedia.org/wiki/Singleton_pattern –

+0

rooster117 правильно. Вы имеете в виду статический метод. Помните, что все методы общедоступны в Objective-C. Однако вы можете «скрыть» метод или вызвать предупреждение компилятора, объявив методы в расширении класса. Тем не менее, они не являются частными. –

ответ

6

Вы можете добавить его через категории:

EDIT

Создать новую .h пару .m файл и в файле .h:

@interface UIViewController(JSON) 
-(void) bringJSON; 
-(void) fetchData:(NSData*) data; 


@ end 

Тогда в. m файл:

@implementation UIViewController(JSON) 

-(void) bringJSON { 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

[NSData dataWithContentsOfURL:yourURL]; 

[self performSelectorOnMainThread:@selector(fetchData:) 
withObject:data waitUntilDone:YES]; 

}); 

} 


-(void) fetchData:(NSData*) data { 

//parse - update etc. 

} 


@end 

Где я только предполагаю, что y ou'll будет возвращать NSArray, вы можете поместить туда любой метод и распространить все UIViewControllers. Метод bringJSON будет доступен для всех UIViewControllers и его подклассов.

+0

woooo кажется действительно удивительным человеком. Я дам ему попробовать! – 88fsantos

+0

Как я могу вернуть свой json, только когда он загружен? : S Если я помещаю его в папку "dispatch_get_main_queue", то получается ошибка. – 88fsantos

+1

смотреть править пожалуйста –

4

Я считаю, что вы думаете о статическом методе, который будет определен символом «+».

+ (String) yourFunctionName:(NSInteger)someValue ..... 

Тогда вы могли бы назвать его где-нибудь с именем класса первым:

[YourClassName yourFunctionName:5]; 

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

2

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

Помните также, что цель-c также просто просто C. У вас могут быть включены файлы .c, которые просто содержат подпрограммы ANSI-C, которые также можно вызвать.

+0

Я вижу, Моя проблема с методами классов заключается в том, что мой возврат всегда вызывает ошибку, поскольку он не может использовать переменные экземпляра. Есть ли способ использовать переменные класса? О синглтонах, я думаю, я должен прочитать об этом. Синглтоны отличаются от протоколов? Я вышел из интерфейса, и я нахожусь в xcode примерно месяц назад. Поэтому немного сложно делать более сложные вещи. Tks много для помощников помощи! – 88fsantos

+0

Вы всегда можете реализовать объекты C++. Таким образом, вы можете предоставить защищенным/частным переменным только доступ к функциям. XCode имеет возможность компилировать объекты C++ в ваш код Objective-C. Я попытаюсь найти некоторые ссылки, но вот сообщение об объекте (без образца кода) в StackOverflow. Http: // StackOverflow.com/вопросы/406753/how-well-is-object-c-поддерживается – trumpetlicks

+0

tks man! я буду читать, что – 88fsantos

3

Используйте знак + перед возвратом типа метода.

Например:

+ (void) Name: (NSString *) str{ 

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