exc_bad_access when calling dismissViewControllerAnimated - iphone

I have a ViewController that slides up. When you click "Save" it sends a request to the server. When the request is done, it dismisses the ViewController. I switched the NSURLConnection over to using async and blocks (https://github.com/rickerbh/NSURLConnection-Blocks). Dismissing the ViewController now throws "Thread 2: Program received signal: EXC_BAD_ACCESS". I'm using ARC, if that matters.
- (IBAction) savePressed
{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:#"http://api.com/items/create"]];
//NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[NSURLConnection asyncRequest:request success:^(NSData *data, NSURLResponse *response) {
[self close];
} failure:^(NSData *data, NSError *error) {
[self close];
}];
}
- (void) close
{
[self dismissViewControllerAnimated:YES completion:nil];
}
Here is the log
2012-10-24 10:32:43.780 Prayrbox[22268:1703] bool _WebTryThreadLock(bool), 0x1f21fd90: Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...
1 0x347dc927 WebThreadLock
2 0x36718615 <redacted>
3 0x366d0a85 <redacted>
4 0x3678d789 <redacted>
5 0x366c0637 <redacted>
6 0x366d50e7 <redacted>
7 0x368c1f11 <redacted>
8 0x366d4969 <redacted>
9 0x36744745 <redacted>
10 0x366907ad <redacted>
11 0x7ef71 -[ComposeViewController close]
12 0x7eec5 __36-[ComposeViewController savePressed]_block_invoke_0
13 0x82d8f __56+[NSURLConnection(Blocks) asyncRequest:success:failure:]_block_invoke_0
14 0x37e8811f <redacted>
15 0x37e96259 <redacted>
16 0x37e963b9 <redacted>
17 0x37b30a11 <redacted>
18 0x37b308a4 start_wqthread
[Switching to process 10755 thread 0x2a03]
[Switching to process 10755 thread 0x2a03]
[unknown](gdb)
I have spent 2 hours searching for help on this. If anyone knows what could help, please speak up! :)

At first thought, I would agree with the above comment that you might be on the wrong thread when dismissing the view.
UI Stuff should be done on Main, so to enforce that, you can do:
-(void) close {
if([NSThread isMainThread]) {
[self dismissViewControllerAnimated:YES completion:nil];
}
else {
[self performSelectorOnMainThread:#selector(close)
withObject:nil
waitUntilDone:YES];
}
}
Rather than doing the performSelectorOnMainThread from your block, this will ensure that anytime it's called you'll be on main.

Related

Exception SIGABRT in dispatch_async _block_invoke for NSMutableDictionary setObject

I observed no crash in my simulator runs but it is consistently happening on my iPhone (iOS 5.1) and iPad (iOS 6.1).
After much effort I symbolicated the crash to point the erroneous line in my code - here this symbolicated log goes:
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Crashed Thread: 12
Last Exception Backtrace:
0 CoreFoundation 0x342fd29e 0x3423b000 + 795294
1 libobjc.A.dylib 0x3c17197a 0x3c169000 + 35194
2 CoreFoundation 0x342fd1c0 0x3423b000 + 795072
3 CoreFoundation 0x3425e864 0x3423b000 + 145508
4 MyApp 0x0011626c __55-[MSCollectionViewController updateUI:]_block_invoke (MSCollectionViewController.m:385)
5 libdispatch.dylib 0x3c58911a 0x3c587000 + 8474
6 libdispatch.dylib 0x3c58d95c 0x3c587000 + 26972
7 libdispatch.dylib 0x3c58dabc 0x3c587000 + 27324
8 libsystem_c.dylib 0x3c5bda0c 0x3c5b7000 + 27148
9 libsystem_c.dylib 0x3c5bd8a0 0x3c5b7000 + 26784
As anyone can guess, the error is on Line#385 of my MSCollectionViewController.m file. However I am still unable to see what could cause such a crash, as it runs fine on simulator.
UPDATED CODE:
Note that now it is crashing at [m_photoArray addObject:photoDetailDict];
I added m_photoArray (NSMutableArray) initialization for reference which I am doing on main thread.
Here is my code, including the problematic line # 385 as comment:
__block NSString * flickrPhotoArrayPath = [Commons getFlickrJSONPathForMuseumURI:argURI];
if (m_photoArray)
{
[m_photoArray removeAllObjects];
}
else
{
m_photoArray = [[NSMutableArray alloc] init];
}
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0),
^{
NSArray *arrayFromFlickrJSON = [NSArray arrayWithContentsOfFile:flickrPhotoArrayPath];
if (!arrayFromFlickrJSON || [arrayFromFlickrJSON count]==0)
return;
if (bViewVisible)
{
[SVProgressHUD showWithStatus:#"Fetching Photos" maskType:SVProgressHUDMaskTypeBlack];
}
for (id photo in arrayFromFlickrJSON)
{
NSDictionary * dict = (NSDictionary *)photo;
NSMutableDictionary * photoDetailDict = [dict mutableCopy];
NSString * filePath = [photoDetailDict objectForKey:#"photoFilePath"];
UIImage *image = [UIImage imageWithContentsOfFile:filePath];
[photoDetailDict setObject:image forKey:#"photoImage"];
//AND HERE GOES THE CRASH!!!
[m_photoArray addObject:photoDetailDict]; //Line 385
}
dispatch_async(dispatch_get_main_queue(), ^{
if ([SVProgressHUD isActive])
[SVProgressHUD dismiss];
//More code to update UI
});
});
Here goes my 2 questions:
What is it in NSMutableDictionary setObject that I am seeing this crash?
Why don't I observe it with same set of data on my simulator?
UPDATE:
Instantly found glitch in my code:
The issue maybe in [photo mutableCopy]; - photo is of id type, not NSDictionary. I need to cast it to NSDictionary first before performing mutableCopy.
The major question still remains is - why simulator allows it?
Heck, why even compiler allows it?

NSURLConnection won't respond after I get Error Domain=NSPOSIXErrorDomain Code=57

So here's the brief description of the issue:
I have an app that uses web sockets SocketRocket - client-side, Nodejs + Socket.io - server side.
I establish a socket connection upon launch of the application and everything works just fine. In case i suspend the app (going to background, locking screen, etc) I'm able to reconnect upon entering foreground.
However if i lose connection (for example, if i block myself on the router (i get a socket failure error in 5-10 seconds), then unblock myself) - i won't be able to connect to ANY url with NSURLConnection. (Why am I bothering with this? Well, people tend to loose often on mobile devices, so I have to handle this error)
This code is getting called upon connectivity restore/entering foreground if i previously had a working connection.
-(void) connectToHost:(NSString *)host onPort:(NSInteger)port withParams:(NSDictionary*)params withNamespace:(NSString *)endpoint
{
if (!_isConnected && !_isConnecting)
{
_isConnecting = YES;
_host = host;
_port = port;
_endpoint = [endpoint copy];
NSMutableString *query = [[NSMutableString alloc] initWithString:#""];
[params enumerateKeysAndObjectsUsingBlock: ^(id key, id value, BOOL *stop) {
[query appendFormat:#"&%#=%#",key,value];
}];
NSString *s = [NSString stringWithFormat:HANDSHAKE_URL, _host, _port, rand(), query];
[self log:[NSString stringWithFormat:#"Connecting to socket with URL: %#",s]];
_timeout = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:#selector(disconnect) userInfo:nil repeats:NO];
[[LRResty client] get:s withBlock:^(LRRestyResponse *response) {
[_timeout invalidate], _timeout = nil;
if ( response.status == 200 )
{
NSString *responseString = [response asString];
[self log:[NSString stringWithFormat:#"requestFinished() %#", responseString]];
NSArray *data = [responseString componentsSeparatedByString:#":"];
_sid = [data objectAtIndex:0];
[self log:[NSString stringWithFormat:#"sid: %#", _sid]];
_heartbeatTimeout = [[data objectAtIndex:1] floatValue] + 7.0;
[self log:[NSString stringWithFormat:#"heartbeatTimeout: %f", _heartbeatTimeout]];
NSString *t = [data objectAtIndex:3];
NSArray *transports = [t componentsSeparatedByString:#","];
[self log:[NSString stringWithFormat:#"transports: %#", transports]];
[self openSocket];
}
else
{
[_delegate socketIOHandshakeFailed:self];
}
}];
}
}
That's what i get in a normal case:
Connecting to socket with URL: https://example.com:9001/socket.io/1/?t=282442
requestFinished() ==> 843717395328441553:60:60:websocket
debug: Finished request GET https://example.com:9001/socket.io/1/?t=282442 <LRRestyRequest>
In case i try to reconnect after connection failure:
Connecting to socket with URL: https://example.com:9001/socket.io/1/?t=282475249
I tried running a synchronous request, yet it would block my UI and will never finish. So, actually request is probably trying to start, but never gets to the point of execution.
This is what i get if i pause an app in the debugger:
you can see the screenshot here -> http://avvs.co/static/app_paused.jpg
Check thread 7 -
#0 0x9855fc22 in mach_msg_trap ()
#7 0x026852d3 in -[NSRunLoop(NSRunLoop) run] ()
#8 0x00019b1b in -[LRURLRequestOperation start]
#9 0x00016670 in -[LRRestyRequest start]
UPDATE
this is the complete operations list for this thread, would be really glad if you can point out what's wrong in here
#0 0x9855fc22 in mach_msg_trap ()
#1 0x9855f1f6 in mach_msg ()
#2 0x0073c10a in __CFRunLoopServiceMachPort ()
#3 0x0069f5d5 in __CFRunLoopRun ()
#4 0x0069ed84 in CFRunLoopRunSpecific ()
#5 0x0069ec9b in CFRunLoopRunInMode ()
#6 0x0268540f in -[NSRunLoop(NSRunLoop) runMode:beforeDate:] ()
#7 0x026852d3 in -[NSRunLoop(NSRunLoop) run] ()
#8 0x00019b0b in -[LRURLRequestOperation start]
#9 0x00016660 in -[LRRestyRequest start]
I've finally found the solution. Actual problem was not in the NSURLConnection, but in the socket implementation. When loosing connection, app was closing input and output streams, but they were not removed from the running loop, nor were they dispatched. By fixing it I was able to restore connectivity.

NSThread is blocking my GUI

I use a NSThread in order to download videos and images from a server side.It work looks and works great except the fact that when the downloading is done my GUI gets blocked until the download is complete.When the download is finished it takes a few seconds to work again.
this is how the server request is done:
- (void) repeatRequest{
NSLog(#"repeatRequest");
[NSThread detachNewThreadSelector:#selector(backgroundRequest) toTarget:self withObject:nil];
}
- (void) backgroundRequest{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSURL *url = [NSURL URLWithString:myURLStr];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
[pool drain];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
//do things
}
IMPORTANTAnd I also tried to start the ASIHTTPRequest from the GUI thread but with the same behaviour.
Any idea about what could be wrong?
EDIT:
- (void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
//internetReachable = [[Reachability reachabilityForInternetConnection] retain];
if(timer1 == nil)
{
timer1 = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector: #selector(repeatRequest) userInfo: nil repeats: YES];
}
}
Try to run synchronous ASIHTTPRequest in your background thread, and handle results not in delegate method (requestFinished), but after [request startSynchronous];
I don't know anything about ASIHTTPRequest but i would assume its -startAsynchronous method already handles the background downloading for you. It all likelihood, it is returning immediately and your new thread is exiting. Also, you should just use [pool release] at the end of a thread method instead of [pool drain], it will be drained upon release, and you won't be leaking an NSAutoReleasePool. Does ASIHTTPRequest have a -startSynchronous (or just plain -start) method? Try using that within -backgroundRequest, as it should block the premature exit of that thread.

iPhone app crashes if view is swapped during data download

I have an iphone app that when the user clicks a row in a uitable, it takes the row value and downloads some data from the web to populate the next view. However if the user switches back to the first view when the data is being downloaded the app crashes. I think i've found the problem but need some help fixing it:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath];
BlogRssParser *blogRss = [[BlogRssParser alloc] init];
blogRss.terms = [[selectedObject valueForKey:#"data"] description];
RssFunViewController *rssFun = [[RssFunViewController alloc] initWithNibName:#"RssFunViewController" bundle:nil];
rssFun.rssParser = blogRss;
[blogRss release];
[self.navigationController pushViewController:rssFun animated:YES];
rssFun.navigationItem.title=blogRss.terms;
[rssFun release];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
So where it says [self.navigationController pushViewController:rssFun animated:YES]; this is where it crashes because once it finishes the download this is the next line of code and it can push a view if its not on the right screen if that makes any sense!? Thanks for any advice anyway!
BlogRssParser:
-(BOOL)fetchAndParseRss{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
//To suppress the leak in NSXMLParser
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
NSString *urlTerm = terms;
urlTerm = [urlTerm stringByReplacingOccurrencesOfString:#" " withString:#"+"];
urlTerm = [urlTerm stringByReplacingOccurrencesOfString:#"\t" withString:#""];
urlTerm = [urlTerm stringByReplacingOccurrencesOfString:#"&" withString:#""];
urlTerm = [urlTerm stringByReplacingOccurrencesOfString:#"'" withString:#""];
urlTerm = [urlTerm stringByReplacingOccurrencesOfString:#"-" withString:#""];
urlTerm = [urlTerm stringByReplacingOccurrencesOfString:#"_" withString:#""];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:#"xxxxxxxxxxxxx/app.php?s=%#", urlTerm]];
NSLog(#"%#", url);
BOOL success = NO;
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser setShouldProcessNamespaces:YES];
[parser setShouldReportNamespacePrefixes:YES];
[parser setShouldResolveExternalEntities:NO];
success = [parser parse];
[parser release];
[pool drain];
return success;
}
Console:
2010-12-06 19:15:09.826 Example[452:207] -[NSCFString processCompleted]: unrecognized selector sent to instance 0x6123d30
2010-12-06 19:15:09.855 Example[452:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString processCompleted]: unrecognized selector sent to instance 0x6123d30'
*** Call stack at first throw:
(
0 CoreFoundation 0x02664b99 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x027b440e objc_exception_throw + 47
2 CoreFoundation 0x026666ab -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x025d62b6 ___forwarding___ + 966
4 CoreFoundation 0x025d5e72 _CF_forwarding_prep_0 + 50
5 Foundation 0x000423ca __NSThreadPerformPerform + 251
6 CoreFoundation 0x02645faf __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
7 CoreFoundation 0x025a439b __CFRunLoopDoSources0 + 571
8 CoreFoundation 0x025a3896 __CFRunLoopRun + 470
9 CoreFoundation 0x025a3350 CFRunLoopRunSpecific + 208
10 CoreFoundation 0x025a3271 CFRunLoopRunInMode + 97
11 GraphicsServices 0x02f4300c GSEventRunModal + 217
12 GraphicsServices 0x02f430d1 GSEventRun + 115
13 UIKit 0x002d1af2 UIApplicationMain + 1160
14 Example 0x0000244a main + 84
15 Example 0x000023ed start + 53
)
terminate called after throwing an instance of 'NSException'
unrecognized selector means that you've attempted to send a message to an object that doesn't know how to handle it.
For example, suppose you had a class AlienParser and it had two methods: land and probe. You create an instance of it called myParser, and then tried to call [myParser destroyAllHumans]. The resulting object wouldn't know what to do, and you'd get an exception thrown. It compiles because you can send any message to anything with Obj-C, because at runtime it may know how to handle it even if the compiler couldn't detect so.
Somewhere (the hex is your clue, it doesn't show a full backtrace) you've got some code calling another object with a message it just plain doesn't support. It's probably worth mentioning that ANY message to nil does nothing and returns nil so you've obviously got an actual object there you are sending messages to.
Have you tried downloading the XML in a background thread? This may alleviate some of the issues as the main thread won't be blocked. You should be able to push on the RssFunViewController while the XML is/being downloaded.

asi-http-request asynchronous selector error

I keep getting a very weird error when using asi-http-request when I use selectors to register callbacks for success and failure.
The following methods are used:
// Sets up a request and takes care of the stuff that needs to be for each
// and every request.
- (void) setup:(NSString *) fragment successCallback:(SEL) success_callback failureCallback:(SEL) failure_callback {
// Convert the string to a url
NSString *url = [[NSString alloc] initWithFormat:#"%#%#",
self.server.serverUrl,
fragment
];
NSURL *full_url = [NSURL URLWithString: url];
// Time to setup the request
self.curRequest = [ASIFormDataRequest requestWithURL:full_url];
[self.curRequest setDelegate:self];
[self.curRequest setDidFailSelector:success_callback];
[self.curRequest setDidFinishSelector:failure_callback];
// If we're using iphone os version 4.0
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0
[self.curRequest setShouldContinueWhenAppEntersBackground:YES];
#endif
// Clean up time!
[url release];
[full_url release];
}
The register method
- (void) register_user:(NSString *) email password:(NSString *) password confirmPassword:(NSString *) confirm_password successCallback:(SEL) success_callback failureCallback:(SEL) failure_callback {
[self setup:#"/users/register"
successCallback:success_callback
failureCallback:failure_callback
];
// Setup the input to the method
[self.curRequest setPostValue:email forKey: #"email"];
[self.curRequest setPostValue:password forKey: #"password"];
[self.curRequest setPostValue:confirm_password forKey: #"confirm_password"];
NSLog(#"We got here yo :)~ %# %# %#", email, password, confirm_password);
[self.curRequest startAsynchronous];
}
Success and Failure Callbacks
- (void) registerSuccess: (ASIHTTPRequest *) request {
NSString *response = [request responseString];
NSLog(#"Response string: %s", response);
}
// Called when the http request fails. That means it could not
// reach the server for an unknown reason.
- (void) registerFailure: (ASIHTTPRequest *) request {
NSError *error = [request error];
NSLog(#"Register error: %s", [error localizedFailureReason]);
}
I invoke the register method like so:
[self.appdelegate.userModel register_user:self.emailAddress.text
password:self.password.text
confirmPassword:self.confirmPassword.text
successCallback:#selector(registerSuccess:)
failureCallback:#selector(registerFailure:)
];
The callstack and error from gdb:
2010-12-02 12:33:56.889 ProjectPrototype[2201:6003] -[__NSCFType absoluteURL]: unrecognized selector sent to instance 0x6457c60
2010-12-02 12:33:56.891 ProjectPrototype[2201:6003] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType absoluteURL]: unrecognized selector sent to instance 0x6457c60'
*** Call stack at first throw:
(
0 CoreFoundation 0x0292eb99 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x02a7e40e objc_exception_throw + 47
2 CoreFoundation 0x029306ab -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x028a02b6 ___forwarding___ + 966
4 CoreFoundation 0x0289fe72 _CF_forwarding_prep_0 + 50
5 CoreFoundation 0x02843b04 CFURLCopyAbsoluteURL + 100
6 CFNetwork 0x023fe5e8 _ZN11HTTPMessage10initializeEPK10__CFStringPK7__CFURLS2_ + 52
7 CFNetwork 0x023fe50c CFHTTPMessageCreateRequest + 80
8 ProjectPrototype 0x00011360 -[ASIHTTPRequest main] + 852
9 Foundation 0x000c83ca __NSThreadPerformPerform + 251
10 CoreFoundation 0x0290ffaf __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
11 CoreFoundation 0x0286e39b __CFRunLoopDoSources0 + 571
12 CoreFoundation 0x0286d896 __CFRunLoopRun + 470
13 CoreFoundation 0x0286d350 CFRunLoopRunSpecific + 208
14 CoreFoundation 0x02870614 CFRunLoopRun + 84
15 ProjectPrototype 0x00023b55 +[ASIHTTPRequest runRequests] + 173
16 Foundation 0x000b376c -[NSThread main] + 81
17 Foundation 0x000b36f8 __NSThread__main__ + 1387
18 libSystem.B.dylib 0x9689881d _pthread_start + 345
19 libSystem.B.dylib 0x968986a2 thread_start + 34
)
terminate called after throwing an instance of 'NSException'
I appreciate any and all help, thanks alot :)~
Dudester you have two serious syntax priblems:
First, each use of this is incorrect:
self.curRequest
The first time only you set request, use self.request = blah.
After that, just use [curRequest xyz]
Second serious problem,
[self.curRequest setDidFailSelector:success_callback];
[self.curRequest setDidFinishSelector:failure_callback];
You forgot the 'selector' bit, it should look more like this:
[request setDidFinishSelector:#selector(blahCommuniqueDone:)];
[request setDidFailSelector:#selector(blahCommuniqueDoneProblem:)];
(Be careful with the colons, also.) Forget about trying to pass them in as SELs. The two routines are right there in the same object. You simply point to them.
Here's a typical complete working example. If you follow this you'll have no problems. These three routines just sit in the same file.
-(void) blahCommunique
{
// it sends the string blah for pid (even if blank)
// from V5 it sends the blah as well ..
NSURL *url = [NSURL URLWithString:#"https://blah?blah"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:blahAA forKey:#"blahAA"];
[request setPostValue:blahBB forKey:#"blahBB"];// new in V5
[request setPostValue:SIMPLESTRINGTHISVERSION forKey:#"version"];
#define QQ(a) [NSString stringWithFormat:#"%d", a]
[request setPostValue:QQ(vfourblahCount) forKey:#"cr"];
[request setPostValue:QQ(vfourblahCount) forKey:#"sb"];
[request setPostValue:QQ(vfourblahCount) forKey:#"so"];
[request setPostValue:QQ(vfourblahCount) forKey:#"lc"];
[request setPostValue:QQ(OLDlaunchCount) forKey:#"olc"];
#undef QQ
[request setPostValue:[[NSLocale preferredLanguages] objectAtIndex:0] forKey:#"langpref"];
[request setDelegate:self];
[request setDidFinishSelector:#selector(statsCommuniqueDone:)];
[request setDidFailSelector:#selector(statsCommuniqueDoneProblem:)];
[request startAsynchronous];
}
-(void) statsCommuniqueDone:(ASIHTTPRequest *)request
{
NSData *newStringData = [request responseData];//todo, check [incomingFloatData length]
self.factoryMessageIfAny =
[[[NSString alloc] initWithData:newStringData encoding:NSUTF8StringEncoding] autorelease];
if ( [self.factoryMessageIfAny isEqualToString:#"OK"] )
self.factoryMessageIfAny = #"";
}
-(void) statsCommuniqueDoneProblem:(ASIHTTPRequest *)request
{
// statsCommuniqueDoneProblem ... !
self.factoryMessageIfAny = #"";
}