впервые в сцене Objective-C / iOS. Опыт работы в PHP и C ++.
У меня небольшие проблемы с использованием NSInvocationOperation. Вот моя ситуация:
С некоторой помощью онлайн у меня есть класс getData.h, где getData.m содержит:
#import "getData.h"
@implementation getData
@synthesize allData;
-(void)loadData{
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(getXML) object:nil];
[queue addOperation:operation];
[operation release];
}
-(void)getXML{
NSURL *url = [NSURL URLWithString:@"http://tubeupdates.com/rss/all.xml"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection connectionWithRequest:request delegate:self];
NSError *requestError;
NSURLResponse *urlResponse = nil;
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&requestError];
if (response == nil) {
// Check for problems
if (requestError != nil) {
NSLog(@"Error!");
}
}
}
-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
if (allData)
[allData appendData:data];
else
allData = [[NSMutableData alloc] initWithData:data];
}
-(void) connectionDidFinishLoading:(NSURLConnection *)connection {
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *fullName = [NSString stringWithFormat:@"feed.xml"];
NSString *fullFilePath = [NSString stringWithFormat:@"%@/%@",docDir,fullName];
[allData writeToFile:fullFilePath atomically:YES];
}
-(void)dealloc{
[allData release];
[super dealloc];
}
@end
Я знаю, что метод вызывается в очередь, так как я сделал временный «printthis» метод для его вызова, который просто отображал некоторый текст с NSLog. Однако моя проблема возникает при попытке вызвать функцию getXML (чтобы скопировать файл XML с сервера). getXML работает, если я вызываю его напрямую, но не добавляет его в очередь. Вполне вероятно, что мне не хватает общей картины, и я не до конца понял все, прежде чем начал. Я был бы признателен за помощь в этом. Кажется, неважно, насколько вы хороши в C ++, PHP и т. Д. Программирование на iOS - сложная задача!