AsiHtprequest مشاكل. "تم إرسال المحدد غير المعترف به إلى المثال"

StackOverflow https://stackoverflow.com/questions/2618300

سؤال

أواجه مشاكل في استخدام ASIHTPREQUST. هذا هو الخطأ الذي أحصل عليه:

2010-04-11 20:47:08.176 citybikesPlus[5885:207] *** -[CALayer rackDone:]: unrecognized selector sent to instance 0x464a890
2010-04-11 20:47:08.176 citybikesPlus[5885:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[CALayer rackDone:]: unrecognized selector sent to instance 0x464a890'
2010-04-11 20:47:08.176 citybikesPlus[5885:207] Stack: (
    33936475,
    2546353417,
    34318395,
    33887862,
    33740482,
    126399,
    445238,
    33720545,
    33717320,
    40085013,
    40085210,
    3108783,
    11168,
    11022
)

وهذا هو الكود الخاص بي (جزء منه):

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{

 [image setImage:[UIImage imageNamed:@"bullet_rack.png"]];

 BikeAnnotation *bike = [[annotationView annotation] retain];

 bike._sub = @"";

    [super viewDidLoad];

 NSString *newUrl = [[NSString alloc] initWithFormat:rackUrl, bike._id];
 NSString *fetchUrl = [newUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

 [networkQueue cancelAllOperations];
 [networkQueue setRequestDidFinishSelector:@selector(rackDone:)];
 [networkQueue setRequestDidFailSelector:@selector(processFailed:)];
 [networkQueue setDelegate:self];

 ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:fetchUrl]] retain];
 [request setDefaultResponseEncoding:NSUTF8StringEncoding];
 [networkQueue addOperation:request];

 [networkQueue go];
}

- (void)rackDone:(ASIHTTPRequest *)request
{
 NSString *resultSearch = [request responseString];

 NSData *data = [resultSearch dataUsingEncoding:NSUTF8StringEncoding];

 NSString *errorDesc = nil;
 NSPropertyListFormat format;
 NSDictionary * dict = (NSDictionary*)[NSPropertyListSerialization
            propertyListFromData:data
            mutabilityOption:NSPropertyListMutableContainersAndLeaves
            format:&format
            errorDescription:&errorDesc];

 rackXmlResult* fileResult = [[[rackXmlResult alloc] initWithDictionary:dict] autorelease];
 rackXmlSet *rackSet = [fileResult getRackResult];

 NSString *subString = [[NSString alloc] initWithFormat:@"Cyklar tillgängligt: %@ -- Lediga platser: %@", rackSet._ready_bikes, rackSet._empty_locks];

 [activity setHidden:YES];
 [image setHidden:NO];

 BikeAnnotation *bike = [annotationView annotation];

 bike._sub = subString;
}

- (void) processFailed:(ASIHTTPRequest *)request
{
 UIAlertView *errorView;

 NSError *error = [request error];
 NSString *errorString = [error localizedDescription];

 errorView = [[UIAlertView alloc]
     initWithTitle: NSLocalizedString(@"Network error", @"Network error")
     message: errorString
     delegate: self
     cancelButtonTitle: NSLocalizedString(@"Close", @"Network error") otherButtonTitles: nil];

 [errorView show];
 [errorView autorelease];
}

يتم تحميل العملية على أنها LeftCalloutView في فقاعة وسيلة الشرح عند تحميل التعليقات التوضيحية في MapView الخاصة بي ، لذلك كثيرًا (80 مرة أو نحو ذلك). يُقصد به استرداد XML Plist من خادم ، وحوضه واستخدام البيانات ... لكنه يموت في Rackdone:

هل عند احدكم فكرة؟

التحيات ، بول بيلن

هل كانت مفيدة؟

المحلول 2

لقد وجدت الحل باستخدام [self retain]. يبدو أنه لأنني أقوم بتحميل الكائن كثيرًا ، فإنه لا يخصصه ذاتيًا لفترة كافية لتلقي Rackdone: Action.

انه يعمل الان. الآن أنا فقط بحاجة إلى معرفة كيف يمكنني تحميل هذا عند الطلب ، وليس عندما يتم تحميل التطبيق.

نصائح أخرى

حسنًا ، يبدو أن المشكلة networkQueue الكائن (أيا كان هذا هو الفئة الفرعية nsoperationsqueue؟) هو إرسال rackDone: رسالة إلى عرض ViewController بدلاً من ViewController نفسه. Calayers هي سمات طرق العرض وليس ViewControllers ، لذا يجب أن يأتي الخطأ من عرض.

تحقق من الرمز ل networkQueue.

كما يبدو أنك لا تستخدم self تدوين ل networkQueue وإذا كانت خاصية للفصل ، فقد تموت دون سابق إنذار لأنه لا يتم الاحتفاظ به بشكل صحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top