On 6 Jun, 2013, at 5:34 AM, Keary Suska <cocoa-...@esoteritech.com> wrote:
> On Jun 5, 2013, at 7:50 AM, Roland King wrote: > >> I have a property, 'meaning' on my objects in a core data model. It's >> optional. I need to find all the meanings which contain a certain string >> (not terribly efficient but a fairly rare search). >> >> I started out with this predicate >> >> [ NSPredicate predicateWithFormat:@"meaning CONTAINS %@", searchString >> ]; >> >> but it crashes with a EXC_BAD_ACCESS deep down in the SQLLite execution >> trying to evaluate CFStringGetLength on a zero pointer. My assumption here >> is that it's finding an object with a null meaning, so I want to filter them >> out. So I tried >> >> [ NSPredicate predicateWithFormat:@"( meaning != NULL ) AND ( meaning >> CONTAINS %@ )", searchString ]; >> >> and a few variants thereof, but they crash the same way, leading me to think >> perhaps both parts of the AND are evaluated whether or not the first part >> succeeds, ie not like C's guaranteed shortcut, and perhaps I shouldn't >> expect it to be. > > I would not jump to an issue with NULL values since NULL handing is > fundamental to any SQL-aware API. I would instead consider a memory issue > first. Turn on zombies and see if you get a different response. Post the > backtrace if you want potentially better feedback. In any case, it is highly > unlikely to be the predicate or underlying SQL machinery that is causing this > crash. > > HTH, > > Keary Suska > Esoteritech, Inc. > > Thanks for the reply Keary. Very sure it wasn't a memory issue, I'm using ARC (not a guarantee of course but it's been very reliable thus far) and I checked the registers at the point of failure, with the help of a few goggled articles, and confirmed this was CFStringGetLength() sent to a NULL pointer. I did split the query into two and weed out the NULLs, then filter the rest, that worked. That also showed me that I hardly had any instances which didn't supply a 'meaning' (it was optional hence it could be nil), so I changed it to non-optional and made the default the empty string, upgraded the database and the original query worked fine again. I'd agree SQL is great with NULLs and I think that part of the API is handing the NULL just fine, but that then it's passed to the filtering code which uses a CFString() call on it and it crashes there when it's optional and not supplied. It's working happily now with the non-optional parameter and for the sake of a few extra bytes in the database, the predicate is simpler too so I probably ended up at a better solution. _______________________________________________ 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com