CoreData, TextView and Bindings
CoreData, TextView and Bindings
- Subject: CoreData, TextView and Bindings
- From: Keith Wilson <email@hidden>
- Date: Thu, 1 Dec 2005 14:44:36 +1100
Hi, (I'm new here)
I've just sent this one off as a bug report to Apple but I'm still
scared of a crash - that is, maybe I didn't really find the problem.
Anyone got any ideas?
The top half of my screen contains a diagram. The bottom half of the
screen has a TabView - one of the tabs displays a NSTextView that has
all functions ticked (ie it's RTFD). The user can drag whatever he/
she likes into the NSTextView (text, pics, webpages, etc) and then
save it to the SQLite database. As the user clicks around the
diagram in the top half of the screen, the info in the TabView is
refreshed to whatever is stored in the database for the clicked-on
object.
In my ManagedObjectModel the Attribute that stores the TextView
content has DataType Binary.
I initially bound the contents of the TextView as an attributedString
using NSUnarchiveFromData for the Value Transformer. This sort of
worked but I lost some richness in the info such as HTML tables. I
also ran into the occasional crash. Tried everything to avoid it but
every so often it crashed with an error in -[NSCFDictionary
setObject:forKey:] . I assume that the NSDictionary was being told
to set a nil value (or for a nil key).
I then bound the TextView via a "data" binding again using
NSUnarchiveFromData as the Value Transformer. This worked much
better because the richness of the page was retained BUT it also
crashed if the value in the database had never been initialized (ie
it tried to handle a nil data object).
So I had to over-ride the call to get the data as follows:
//
************************************************************************
*****
-(NSData*)textData
{
NSData *data = nil;
[self willAccessValueForKey:@"story"];
data = [self primitiveValueForKey:@"story"];
[self didAccessValueForKey:@"story"];
if( ! data)
{ NSAttributedString *attributedString = [[[NSAttributedString
alloc] init] autorelease];
data = [attributedString RTFDFromRange:NSMakeRange(0, 0)
documentAttributes:nil];
}
return data;
}
//
************************************************************************
*****
Assigning a dummy attributedString and then converting it to a NSData
object as above seems to work for me so far. No crashes yet.
So maybe the CoreData methods that get the bound values for TextView
using NSUnarchiveFromData need to be fixed.
is this a known problem?
Regards Keith from Down Under
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden