Hi Kin, It looks like you discovered something. I've tried it on the iPhone Simulator and it doesn't work right, like you said. However, it _does_ work on the device.
Thanks, On 11 Νοε 2011, at 3:17 μ.μ., Kin Mak wrote: > Hi Nick, > > The code works fine in iOS 4.3 or earlier, but not anymore on iOS 5.0. I > didn't try it on Mac OSX tough > But if you try the code on different versions of iOS, the result may not be > the same. > > Don Quixote, > Thanks for your tips of using assert. I am now wondering if there is anything > to do with memory instead. > In fact after reading your email, I have written a simple UnitTestCase using > a similar approach, namely using STAssertNotNil : > > - (void)testFormatter { > > NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; > [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS zzz"]; > NSString *currentString = @"2011-11-11 11:00:00.000 CET"; > NSDate *date = [formatter dateFromString:currentString]; > [formatter release]; > > STAssertNotNil(date, @"Formatter failed to convert", nil); > > } > > This simple unit test works fine on iOS 4 with simulator iOS 4.3, but fails > on iOS 5 with simulator iOS 5.0. > I'll now turn on Guard Malloc, and see if I can find out something more. > > > Thanks for the advice/help from you two. > > Thanks again, > Kin > > > On Nov 11, 2011, at 7:42 PM, Don Quixote de la Mancha wrote: > >>> On 11 Νοε 2011, at 10:13 π.μ., Kin Mak wrote: >>>> The following code used to work fine prior to iOS 5. The dateFromString >>>> method seems to stop working on iOS 5 and always returns null. >> >> 2011/11/11 Νικόλας Τουμπέλης <nicktoumpe...@gmail.com>: >>> I've tried the snippet in both Mac OS X and iOS and found that it still >>> works. What are you doing prior to calling dateFromString: ? >> >> Kin, >> >> Does dateFromString also return NULL in the Simulator? >> >> If it works for Nick but not for you, possibly there is a bug >> elsewhere in your own code that is screwing up the date formatter. >> The fact that it returns NULL suggests that a memory allocation >> failed. You're not likely running out of memory, but a corrupt heap >> could cause allocations to fail. >> >> Try turning on all the malloc diagnostics in your debug build's scheme >> editor. Enable Guard Malloc when running in the Simulator. (Guard >> Malloc is not yet supported on devices.) >> >> Try calling dateFromString as the very first line of code in main(). >> If it works there but not in your original code, you probably have a >> bug that occurs in the time duration from the entry of main until you >> reach your original code. If you think that could be the case, use a >> binary search to narrow the problem down, by estimating where the >> halfway point in time is, testing there, and so on. >> >> In general, it is useful to everyone to make liberal use of the >> assert() macro. I cannot emphasize this enough. I call assert() "The >> Test That Keeps On Testing". Even if none of your assertions are >> presently failing, if you leave them in your code and keep them >> enabled in debug builds, it is quite likely that introducing a bug at >> some point in the future will trip one of your existing assertions. >> >> The easiest way to use assert() is to validate all of the parameters >> to each of your methods and functions. Such asserts also serve to >> document the API or your methods and functions far better than do >> comments. While comments have no particular requirement that they be >> updated to keep them in sync with code changes, changing your APIs >> without also revising your assertions will cause them to trip. >> >> Use assert() only to test for conditions that cannot possibly happen >> except as a result of programmer errror. Do not use them to test for >> runtime failures or user error. Use some other means of error >> recovery for that. >> >> Your program should behave in precisely the same way whether or not >> assertions are enabled. Having them enabled will make your executable >> file a little bigger and your App will run a little slower, but the >> difference in speed will just about always be insignificant to the >> user. >> >> The following code is quite *WRONG*, because it uses assert() to check >> for a failure that can happen as a result of limited system resources: >> >> - (unsigned char*) foo >> { >> unsigned char *result; >> >> result = malloc( kBufferSize ); >> >> assert( NULL != result ); // This is a bug! >> >> [initBuf result]; >> >> return result; >> } >> >> However, the following is a correct use of assert. We handle the >> memory allocation failure gracefully, then assert that the buffer >> pointer is non-NULL upon entry to a method that requires pointers to >> be valid: >> >> - (unsigned char*) foo >> { >> unsigned char *result; >> >> result = malloc( kBufferSize ); >> if ( NULL == result ) >> return result; >> >> [initBuf result]; // We are now certain result is not NULL >> >> return result; >> } >> >> - (void) initBuf: (unsigned char*) bufPtr >> { >> assert( NULL != bufPtr ); // Correct use of assert >> ... >> return; >> } >> >> Hope That Helps, >> >> Don Quixote >> -- >> Don Quixote de la Mancha >> Dulcinea Technologies Corporation >> Software of Elegance and Beauty >> http://www.dulcineatech.com >> quix...@dulcineatech.com >> _______________________________________________ >> >> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) >> >> Please do not post admin requests or moderator comments to the list. >> Contact the moderators at cocoa-dev-admins(at)lists.apple.com >> >> Help/Unsubscribe/Update your Subscription: >> http://lists.apple.com/mailman/options/cocoa-dev/kinmak%40me.com >> >> This email sent to kin...@me.com > -- Nick :wq _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com