• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
RE: Validating a non-optional transient Core Data property - it can be erased?!
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Validating a non-optional transient Core Data property - it can be erased?!


  • Subject: RE: Validating a non-optional transient Core Data property - it can be erased?!
  • From: Arthur C. <email@hidden>
  • Date: Thu, 13 Nov 2008 18:17:01 +0100
  • Importance: Normal





>From: email@hidden>To: email@hidden>Subject: Validating a non-optional transient Core Data property - it can be erased?!>Date: Wed, 12 Nov 2008 22:31:02 +0100>

>In my Core Data database I have a property called 'target' (double), which is transient and required (i.e. 'non-optional' in the model). It is dependent on >another variable 'color'; so for each color there is a 'target'. As I want to show only the target for the selected color, I use this transient variable. It is >used as well to set a new target (from the table view) for the selected color.> >In the model I have imposed a minimum, maximum and default value for 'target', and the table column is set to validate immediately. This works correctly. >However, the feedback in the validation sheet is rather minimal. >So, first question: how can I change the validation message, to include e.g. required range etc.?> >Another thing is, I have found that I can erase the value in the table view, without a validation error getting triggered! A nil-value is not acceptable. The >easiest solution I've found is just to make it persistent (non-transient). But I think 'non-optional' should mean 'required', meaning the value should never be >nil... especially since I gave a min, max and default value.>Is there a better way to do this while keeping the variable transient?>
> (Pay careful attention to what  > it says about validation *instead of* versus validation *as well as*  > Core Data's other validation mechanisms.)
Yes, I have found that I should not do it both. That is, if I check also in code on maximum/minimum, an error message 'multiple validation errors' will come up.

>There's also a way of localizing the built-in error messages, which  >may be another solution to your first question if you just want to  >vary the wording a bit:>>   http://developer.apple.com/documentation/Cocoa/Conceptual/CoreData/Articles/cdUsingMOM.html#/ /apple_ref/doc/uid/TP40005190-SW13

Well, that turns out to be complicated... I have to retrieve the validation predicates for max, min from the model:

 NSEntityDescription * recipeEntity = [NSEntityDescription entityForName: @"Recipe" inManagedObjectContext: [[NSApp delegate] managedObjectContext]];  NSAttributeDescription * targetDescription = [[recipeEntity propertiesByName] valueForKey: @"target"]; NSArray * validationPredicates = [targetDescription validationPredicates];
after which the predicates need to be parsed in order to find which is the max / min predicate. Then, the custom error message has to be fed to the managed object model's localizationDictionary, which I don't fully understand... The following code does not work:

 NSManagedObjectModel * model = [[NSApp delegate] managedObjectModel]; NSMutableDictionary * localizedDict = [NSMutableDictionary dictionary];
 for (unsigned int i = 0; i < [validationPredicates count]; i++) {  NSComparisonPredicate * predicate = [validationPredicates objectAtIndex: i];  NSString * description = [predicate description];  double value = [[[predicate rightExpression] constantValue] doubleValue];    if ( [description hasPrefix: @"SELF >"] )  {   minimumTarget = value;   id validationWarning = [[targetDescription validationWarnings] objectAtIndex: i];   [localizedDict setValue: @"Test string 123" forKey: [NSString stringWithFormat: @"ErrorString/%@", validationWarning]];   [model setLocalizationDictionary: localizedDict];     }
 }

Any ideas on how this can be done in a *simpler* way?


Thanks so far,
Arthur



> >Thanks in advance,>Arthur



Express yourself instantly with MSN Messenger! MSN Messenger
_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today it's FREE!
http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden

  • Follow-Ups:
    • Re: Validating a non-optional transient Core Data property - it can be erased?!
      • From: Quincey Morris <email@hidden>
References: 
 >Validating a non-optional transient Core Data property - it can be erased?! (From: Arthur C. <email@hidden>)

  • Prev by Date: Re: geting the folders contents via http
  • Next by Date: Re: Weird bug in IB...
  • Previous by thread: Re: Validating a non-optional transient Core Data property - it can be erased?!
  • Next by thread: Re: Validating a non-optional transient Core Data property - it can be erased?!
  • Index(es):
    • Date
    • Thread