When developing an application in Objective-C and using Cocoa, there is a lot of “magic” that happens in the background. As we get more comfortable with the language and the APIs, we begin to discover the source of that magic and understand not only WHY it works but HOW it works.
One of those areas is the initialization and callbacks from the nib files to my code. Normally, when I want a controller to do something after the NIB/XIB has loaded, I add the method -(void)awakeFromNib and know that I will receive a call when all of the connections into the NIB/XIB are complete. But on what object does this get called and how?
I am currently working on an application that needs to set markers in audio and video tracks. While it’s easy to find a marker visually in the video tracks, it wasn’t quite so clear as to how to set a marker in an audio track. In this tutorial, I’ll demonstrate how to create an audio scrub utility that will play a short audio clip when you drag an NSSlider. It shows the current time code of the track while you update the slider.
Last year, I made the switch from subversion to Git. After 9+ months of using Git, I can comfortably say that it was a very good choice. While branching is easy in subversion, merging is just as bad as it was in cvs. Git is a significant improvement over that. In addition, since Git is a true distributed source control system, I can easily do branches and merges on my local machine without an internet connection and just “push” my changes to my off-site server when it is convenient.
I am also a user of .mac. I like the service and the iDisk is probably my favorite feature. Therefore, I wondered, like chocolate and peanut butter, could I put these two together and come up with something better than the individual parts?
In our continued efforts to demonstrate different ways to use Core Animation, we have noticed different effects you see in OS X itself that present an interesting challenge to duplicate. In a previous post, we demonstrated how to shake a login window similar to the way that OS X shakes the login window when the user enters the wrong password. This time, we’re going to demonstrate how to do what we’ve dubbed the Dashboard Effect.
I’m not sure this is the best name for it as some people may think we mean the ripple effect you see when you drop a new Dashboard widget on the screen, but what we mean is the way in which the Dashboard widgets that are already employed in Dashboard fly in and out of view when you enable and disable Dashboard. Enable Dashboard now and watch your widgets fly in from offscreen. Then disable it and watch the widgets fly out again. This is what we mean by the Dashboard effect and this is what we set out to duplicate.
For those of you who only read this blog for coding suggestions and tutorials — please hit next on your feed reader :)
For those who are also interested in our development environments, hardware, etc. then please read on.
This article is designed to serve multiple purposes. First, it is to educate which I hope that it will. Secondly, it is a personal memory so that if (when!) I run into this issue again, I will be able to use Google to find this post and remember why I am an idiot and why the default settings for things are not always the best settings.
First as always, here is the project that goes with this article.
If you run this application you will see that it does basically nothing. The interesting part of this app is how it crashes. To crash this application, perform the following steps:
- Open the application.
- Select the Application menu.
- Select the About window.
- Close the About window.
- Open the Application menu again.
iWeb Buddy has gone Gold Master!
Marcus S. Zarra of Zarra Studios, released iWeb Buddy on March 6, 2007.
Do you like using iWeb but wished it had some advanced feature that you simply need for your website? Perhaps you want Google Analytics on your site or you want to add Social Bookmarks to your blog posts? Perhaps you just want to have more than one Domain file.
iWeb Buddy has the following features:
- Multiple Domain files that open properly in iWeb.
- Google Analytics injection.
- Social Bookmarks (Digg, Slashdot, etc.)
- Haloscan comments injection.
- Mint site tracking.
- RSS Feed redirection (for use with FeedBurner, etc.)
- RSS Feed linking on blog entries.
- Custom HTML body code
- Custom HTML header code
- And a lot more…
In my first post I wrote about using NSOperation to grab an image of the current frame of a QuickTime movie while it was playing and save it out to the filesystem. Considering the excitement that is surrounding Core Animation these days, I thought it might be interesting to take that project and change it to instead grab the current frame and animate it across the screen using a Core Animation layer (CALayer). I had to employ a few tricks to get it to work, but the end result, while completely useless, is quite excellent.
I had the pleasure recently of being on an episode of the Mac Developer’s Roundtable with Kevin Hoctor, Aaron Hillegas and Steve “Scotty” Scott. In this latest episode, Scotty introduced the topic of data, how to store it, access it, etc. To kick it off, Aaron delivered a fantastic history of Core Data or as it was originally called, Enterprise Objects.
I highly recommend this episode to anyone who is interested in Core Data and Cocoa in general.
You can get the episode from MacDevNet.com.
A question that I have seen pop up a few times is how to build a Wizard in Cocoa. Having thought about that question a bit I realized that a better answer to it is — how to build a wizard in Cocoa using Core Animation.
The basic concept behind this project is to present a window to the user that will walk them through a list of options. To accomplish this task, I created a number of NSViews that will be presented to the user in order so that they can make the decisions needed. To make this a little easier, I have extended NSView to create MSZLinkedView. The added functionality in this subclass is that the view has a reference to the previous and next views in the wizard. These references are set in interface builder directly so that I do not have to worry about them in code.
This article is inaccurate.
The writer was smoking crack or something when he wrote it and has not been able to duplicate his tests since. This article is left here for historical reasons.
One of the things about Objective-C that I find extremely useful is the ability to resolve a method call at runtime. In addition this same functionality allows us to do some fairly creative things with callbacks, passing messages between threads, etc.
However there is a bit of a trick when it comes to passing primitives though some of these methods. For example, one method that I use quite frequently is performSelectorOnMainThread:withObject:waitUntilDone:. How exactly does one pass a BOOL or an int to this method?