• 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
Bindings crash
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Bindings crash


  • Subject: Bindings crash
  • From: Arved von Brasch <email@hidden>
  • Date: Wed, 25 Jan 2012 20:40:13 +0000

Dear Cocoa List,

I'm occasionally seeing a crash when a XIB is loading some of the bindings I've set up.  Using a NSViewController subclass, a view is loaded in response to clicking on a NSToolbar item.  One of the views displays some disk space usage information.  This works fine almost all of the time.  In the NSViewController subclass, the following code exists:

@dynamic freeSpace;

- (NSString *)freeSpace {
	NSDictionary *systemInfo = [[NSFileManager defaultManager] attributesOfFileSystemForPath: [[NSBundle mainBundle] bundlePath] error: nil];
	return [self humanReadableNumber: [NSDecimalNumber decimalNumberWithString: [[systemInfo objectForKey: NSFileSystemFreeSize] stringValue]]];
}

An NSTextField is bound to the "freeSpace" attribute of this class.  Occasionally after recompiling, this will always cause a crash when the view is loaded.  Commenting out the code, recompiling and then restoring the code clears the crash problem up every time.  This suggests to me a race condition somewhere that is causing the crash.

For the sake of completeness, although I'm pretty sure this isn't the problem, the function called does this:

- (NSString *)humanReadableNumber: (NSNumber *)size {
	NSArray *suffixes = [NSArray arrayWithObjects: NSLocalizedString(@"B", @"BYTES"), NSLocalizedString(@"kB", @"KILOBYTES"), NSLocalizedString(@"MB", @"MEGABYTES"), NSLocalizedString(@"GB", @"GIGABYTES"), NSLocalizedString(@"TB", @"TERABYTES"), nil];
	NSDecimalNumberHandler *handler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode: NSRoundPlain scale: 1 raiseOnExactness: NO raiseOnOverflow: NO raiseOnUnderflow: NO raiseOnDivideByZero: NO];
	NSDecimalNumber *byteRate = [NSDecimalNumber decimalNumberWithString: @"1000"];
	NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString: [size stringValue]];
	NSDecimalNumber *temp;
	NSInteger i;
	for (i = 0; i < ([suffixes count] - 1); i++) {
		temp = [number decimalNumberByDividingBy: byteRate withBehavior: handler];
		if ([temp doubleValue] < 1)
			break;
		number = temp;
	}
	return [NSString stringWithFormat: @"%@ %@", [number stringValue], [suffixes objectAtIndex: i]];
}

How can I protect against this problem?

Is there some part of what I'm doing here that is bad practice that might be causing the crash?

Thanks for any insights in solving this.

Arved
_______________________________________________

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: Bindings crash
      • From: Seth Willits <email@hidden>
  • Prev by Date: Re: Confusing CALayer Transform/Frame/Bounds Behavior
  • Next by Date: Re: Confusing CALayer Transform/Frame/Bounds Behavior
  • Previous by thread: Re: boundingRectWithSize problem?
  • Next by thread: Re: Bindings crash
  • Index(es):
    • Date
    • Thread