Re: Running AppleScripts from an App using NSAppleScript
Dave wrote: I have a number of AppleScripts I’d want to run from my App. Each Script has a couple of parameters [...] Example code here: http://appscript.sourceforge.net/nsapplescript.html The downside (one of them anyway) is that you have to do all of the Cocoa-AE packing and unpacking yourself. If you're passing complex data, I suggest pinching and adapting the AEMCodecs class from here: https://bitbucket.org/hhas/appleeventbridge/src If the scripts are part of your .app bundle, another option is to use the AppleScript-ObjC bridge, which allows you to call AS handlers directly from ObjC: http://appscript.sourceforge.net/asoc.html It's not perfect - there's no way to declare non-id signatures (you have to wrap and unwrap C primitives yourself) and some of the AE type bridging is problematic (NSDate/typeLongDateTime isn't automatically bridged, and the typeObjectSpecifier mapping is defective), but for most tasks it's the least painful option. HTH has ___ 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
Bindings across view controllers in OS X storyboards
I have a window made up of a couple of NSSplitViewControllers and custom view controllers. It's mostly a master-detail type of thing, where the selected item in the first split sets up the second, and a selected item there sets up the third. Thing is, I don't see a good way to bind from one view controller to the other. I could subclass NSSplitViewController, override -prepareForSegue:, and inject references to the NSArrayControllers that way, but that means subclassing NSSplitViewController, which seems rather lame. IMO, IB has never adequately address connecting across view controllers, and it's so frequently required, I'm surprised. Or, am I missing some glaringly obvious way of doing this? The WWDC 2014 s212 talk on this glossed over this problem. -- Rick Mann rm...@latencyzero.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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com
Re: Cocoa window stops responding
I think I have found the culprit, I have subclassed NSOpenGLView where in drawRect, I am rendering a IOSurface based texture using CVDisplayLink, although I don't know why it is causing the screen to freeze but when I moved the rendering code from CVDisplayLink to dispatch timer the problem seems to have disappeared. Inside CVDisplay callback I was calling [view setNeedsDisplay:YES] which I think is a correct way of calling drawRect from background thread? while inside timer I am directly calling [view drawRect:NSZeroRect]. I still need to know why... On Mon, Apr 27, 2015 at 3:22 PM, Uli Kusterer witness.of.teacht...@gmx.net wrote: On 27 Apr 2015, at 10:53, Nisar Ahmed nisar@gmail.com wrote: My application has a UI having a main window which contains many views such as NSTableView, NSOutlineView, NSOpenGLView, many NSTextFields etc... The applications works normally but after some time the UI stops responding to the mouse clicks, the application does not hang but it seems that all the views stop redrawing itself. I have tried many things but fails to prevent or reproduce the behaviour. Need some advice on how to fix or atleast find out what is causing such behaviour. I am updating all UI controls on the main thread and using Cocoa bindings heavily.. apparently there is no memory leaks, I am using Xcode 6.1 on Mavericks My first suspects if a window stops drawing are always: 1) Drawing attributes that bleed out (e.g. setting the color to white at some point but never back to black, so the next iteration starts out with white instead of the default black) and aren’t wrapped in saveGState 2) Calls to setNeedsDisplay: or display or the like while a drawRect: is running (e.g. setNeedsDisplay: causes drawRect: which sets a property that calls setNeedsDisplay: again which causes a drawRect: on the next run loop iteration, making your Mac constantly redraw stuff until that’s all it does, or even worse manipulating the view hierarchy while the OS is iterating views to draw them). 3) Threaded code that manipulates the UI from another thread than the main thread. There are very few, very specific circumstances under which you may manipulate and draw views and view hierarchies on a non-main thread (or call setNeedsDisplay: or display), so if you do not for a fact know that this is documented as being OK, you probably shouldn’t do it. This case in particular has often screwed up drawing in such a way that the entire window just became a white sheet. I presume you’ve done the usual, i.e. ran Analyze and fixed all it complained about, as well as Instruments. Cheers, -- Uli Kusterer “The Witnesses of TeachText are everywhere...” http://zathras.de ___ 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
New information. Was: Re: Weird UITableView problem
Thinking this was a Swift problem, I recreated the project, but with ObjC as the language. I set up the UI the same as with the Swift project. It too, only shows a subset of the array, only this one shows 15 rows, not 13. Here's the ViewController.m // // ViewController.m // SimpleObjCTable // // Created by William Squires on 4/28/15. // Copyright (c) 2015 William Squires. All rights reserved. // #import ViewController.h @interface ViewController () @property NSArray *dwarves; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.dwarves = [NSArray arrayWithObjects:@Sleepy, @Sneezy, @Bashful, @Happy, @Doc, @Grumpy, @Dopey, @Thorin, @Dorin, @Nori, @Ori, @Balin, @Dwalin, @Fili, @Kili, @Oin, // These are not shown. @Gloin, @Bifur, @Bofur, @Bombur, nil]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark UITableView Methods -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSInteger theCount = [self.dwarves count]; NSLog(@theCount = %ld, theCount); return theCount; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@indexPath.row = %ld, indexPath.row); UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@SimpleTableIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@SimpleTableIdentifier]; } cell.textLabel.text = [self.dwarves objectAtIndex:indexPath.row]; return cell; } @end running it gives me (in the debug console) 4 instances of theCount = 20, followed by 15 lines of indexPath.row = 0 up to indexPath.row = 14 (15 total, which corresponds to the comment in the initialization line for dwarves = NSArray... line above.) In both cases (the Swift project, and the ObjC project) I use the default view (with the size class w:any, h:any) and pin the UITableView to the edges of the parent view. Now I'm totally lost as to why only a limited subset of the rows are being shown, especially given that tableView:numberOfRowsInSection: consistently returns 20 (the number of items initializing the array). HELP!! On Apr 26, 2015, at 11:29 AM, William Squires wsqui...@satx.rr.com wrote: I made a fairly simple iOS app (Single View template, iPhone, Swift) that has a UITableView. I've got it all hooked up, and running the project (in the simulator) shows the table view, but only 13 (out of 20) rows are ever shown. here's the deal: ViewController.swift class ViewController: UIViewController, UITableViewDelegate, UITableViewSource { private let dwarves = [Sleepy, Sneezy, Bashful, Happy, Doc, Grumpy, Dopey, Thorin, Dorin, Nori, Ori, Balin, Dwalin, Fili, // From here on, these might as well not exist (index = 13) Kili, Oin, Gloin, Bifur, Bofur, Bombur ] let simpleTableIdentifier = SimpleTableIdentifier ... // MARK: UITableViewDataSource/UITableViewDelegate methods func tableView(tableView: UITableView, numberOfRowsInSection section: Int) - Int { return dwarves.count } func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) - UITableViewCell { var cell = tableView.dequeueReusableCellWithIdentifier(simpleTableIdentifier) as? UITableViewCell if (cell == nil) { cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: simpleTableIdentifier) { cell!.textLabel?.text = dwarves[indexPath.row] return cell } } When run, only the first 13 names are shown in the table view; everything from Fili on does not show up. I would expect
Re: New information. Was: Re: Weird UITableView problem
Works for me. Not saying it doesn't work for you, but the problem isn't the code. Created a fresh Single View Application iOS project. Replaced ViewController.m source with the code below. Added a UITableView to the View Controller's View and hooked up the DataSource to the View Controller. Ran it in the Simulator. Scrolled the table and could see all the dwarves. Aaron On Apr 28, 2015, at 9:45 AM, William Squires wsqui...@satx.rr.com wrote: Thinking this was a Swift problem, I recreated the project, but with ObjC as the language. I set up the UI the same as with the Swift project. It too, only shows a subset of the array, only this one shows 15 rows, not 13. Here's the ViewController.m // // ViewController.m // SimpleObjCTable // // Created by William Squires on 4/28/15. // Copyright (c) 2015 William Squires. All rights reserved. // #import ViewController.h @interface ViewController () @property NSArray *dwarves; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.dwarves = [NSArray arrayWithObjects:@Sleepy, @Sneezy, @Bashful, @Happy, @Doc, @Grumpy, @Dopey, @Thorin, @Dorin, @Nori, @Ori, @Balin, @Dwalin, @Fili, @Kili, @Oin, // These are not shown. @Gloin, @Bifur, @Bofur, @Bombur, nil]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark UITableView Methods -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSInteger theCount = [self.dwarves count]; NSLog(@theCount = %ld, theCount); return theCount; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@indexPath.row = %ld, indexPath.row); UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@SimpleTableIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@SimpleTableIdentifier]; } cell.textLabel.text = [self.dwarves objectAtIndex:indexPath.row]; return cell; } @end running it gives me (in the debug console) 4 instances of theCount = 20, followed by 15 lines of indexPath.row = 0 up to indexPath.row = 14 (15 total, which corresponds to the comment in the initialization line for dwarves = NSArray... line above.) In both cases (the Swift project, and the ObjC project) I use the default view (with the size class w:any, h:any) and pin the UITableView to the edges of the parent view. Now I'm totally lost as to why only a limited subset of the rows are being shown, especially given that tableView:numberOfRowsInSection: consistently returns 20 (the number of items initializing the array). HELP!! On Apr 26, 2015, at 11:29 AM, William Squires wsqui...@satx.rr.com wrote: I made a fairly simple iOS app (Single View template, iPhone, Swift) that has a UITableView. I've got it all hooked up, and running the project (in the simulator) shows the table view, but only 13 (out of 20) rows are ever shown. here's the deal: ViewController.swift class ViewController: UIViewController, UITableViewDelegate, UITableViewSource { private let dwarves = [Sleepy, Sneezy, Bashful, Happy, Doc, Grumpy, Dopey, Thorin, Dorin, Nori, Ori, Balin, Dwalin, Fili, // From here on, these might as well not exist (index = 13) Kili, Oin, Gloin, Bifur, Bofur, Bombur ] let simpleTableIdentifier = SimpleTableIdentifier ... // MARK: UITableViewDataSource/UITableViewDelegate methods func tableView(tableView: UITableView, numberOfRowsInSection section: Int) - Int { return dwarves.count } func tableView(tableView:UITableView,
Re: New information. Was: Re: Weird UITableView problem
On Apr 28, 2015, at 12:15 PM, Quincey Morris quinceymor...@rivergatesoftware.com wrote: On Apr 28, 2015, at 09:45 , William Squires wsqui...@satx.rr.com wrote: shows 15 rows You keep saying “shows”, but you don’t say what this means. A table view can only “show” as many rows as can fit between its top and bottom bounds. The rest are “shown” by scrolling the view. So, how many rows can fit on the screen? Assuming that’s less than 20, does every visible row “show” content, or are some of the visible rows blank? If you try to scroll the view, is there no scroll bar and no scrollability? If you can scroll it, do blank rows appear at the end? TBH, it sounds like you’ve forgotten that UITableView doesn’t instantiate cell views for every row in the table, only for the visible rows plus enough nearby rows to make scrolling work smoothly. The rest are instantiated lazily as you scroll. In this case, it means all the rows that can be viewed; not only those that show up at the beginning, but those you can scroll to. Only 13 (or 15, for the ObjC project) are ever available. All the rows show content (namely, the strings in the initialized array, 'dwarves') Interestingly enough, if I recreate this project on Xcode 5 on 10.8.5, all the rows (20) are shown, plus a few blank ones at the end, if I select iPad as the simulator target. This may be because this earlier version doesn't support retina, and so the entire screen of the simulator is shown. In the original versions, (running on Xcode 6.something on 10.10.?) the whole simulator screen is taller than my iMac's screen can display, even for iPhone 5s as the simulator target, thus I have to scroll the table view to see the remaining UITableViewCell instances. If I select iPhone Retina (4-inch) (again in the Xcode 5 project), I no longer get all 20 cells, and - in fact - the last cell visible, Dwalin, is cut off so you can't see all of the cell, even with the (table) view scrolled down all the way. This problem appears to have something to do with Retina support/simulation. ___ 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
Re: New information. Was: Re: Weird UITableView problem
On Apr 28, 2015, at 10:57 , William Squires wsqui...@satx.rr.com wrote: the whole simulator screen is taller than my iMac's screen can display, even for iPhone 5s as the simulator target, … So change the display scale to 50% from the simulator’s Window menu. … thus I have to scroll the table view to see the remaining UITableViewCell instances No, you wouldn’t have to scroll the table view, you’d have to scroll the simulator’s window (but I don’t recall whether it does scroll). Do you have a small sample project you can post to GitHub or DropBox or even email? It’d be interesting to see if others can see the same behavior. ___ 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
Re: New information. Was: Re: Weird UITableView problem
On Apr 28, 2015, at 09:45 , William Squires wsqui...@satx.rr.com wrote: shows 15 rows You keep saying “shows”, but you don’t say what this means. A table view can only “show” as many rows as can fit between its top and bottom bounds. The rest are “shown” by scrolling the view. So, how many rows can fit on the screen? Assuming that’s less than 20, does every visible row “show” content, or are some of the visible rows blank? If you try to scroll the view, is there no scroll bar and no scrollability? If you can scroll it, do blank rows appear at the end? TBH, it sounds like you’ve forgotten that UITableView doesn’t instantiate cell views for every row in the table, only for the visible rows plus enough nearby rows to make scrolling work smoothly. The rest are instantiated lazily as you scroll. ___ 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