This page lists unconfirmed errors and comments from readers. They have not yet been approved or disproved by the author or editor and represent solely the opinion of the reader. iPhone Open Application Development, 1e by Jonathan Zdziarski The catalog page for this title is http://www.oreilly.com/catalog/9780596518554/ This page was last updated May 13, 2008. If you have technical questions or error reports, you can send them to booktech@oreilly.com. Please specify the printing date of your copy or the digital version accessed. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem UNCONFIRMED errors and comments from readers: (1) 4th sentence, 3rd paragraph; The 4th sentence of the 3rd paragraph refers to the arm processor; it should be ARM processor (Advanced RISC Machines). {18} http://safari.oreilly.com/9780596518554/integrating_with_xcode; John's original version can be found at http://www.monsterandfriends.com/?q=node/62. the url gives a 404 (20) 2.5.2, example 2.1 and 2.5.2.3; In example 2-1, we read + (BOOL)needsBatteries; - (BOOL)powerOn; and the text at paragraph 2.5.2.3 reads [...]A plus sign (+) identifies the method as a static method, while a minus sign (-) declares the method as an instance method. Thus, the alloc method (to allocate a new object) will be called using a reference directly to the MyWidget class, whereas methods that are specific to an instance of the MyWidget class, such as needsBatteries and powerOn, will be invoked on the instance returned by alloc. the method "powerOn" is an instance one (+), but "needsBatteries" is not (+) {32} code example; shouldn't it be "self =" not "self ==" ? [34] MainView initWithFrame and dealloc; The call to the parents initializer is wrong and does a comparison instead of setting self Instead of: if((self == [super initWithFrame... Should be if(self = [super initWithFrame: rect]) { It functionally works but is incorrect and causes a warning in the official sdk compiler. Also dealloc is implemented incorrectly and should not call [self dealloc] as it will just recall the current method creating an infinite loop. [46] middle of page; In the implementation of 3.7 Navigation Bars example, the following call to [self dealloc] will inherently makes the application crash - (void)dealloc { [ navBar release ]; [ navItem release ]; [ self dealloc ]; [ super dealloc ]; } calling [self dealloc] enters the function again and RE-release navBar which crashes the application [67] Below 2nd paragraph, make comme; Line reads: ... FileTable.m DeleteableCell.m \ Should read: ... FileTable.m UIDeleteableCell.m \ {67} Second paragraph; The compilation instructions for the "File Browser" example omit the necessary clause "-framework GraphicsServices". The example won't compile as described. {76} http://safari.oreilly.com:80/9780596518554/status_bar_manipulation; in 3.11.3.2. Displaying and removing the status bar image code is misleading: [ UIApp addStatusBarImageNamed: @"NAME" removeOnAbnormalExit: YES ]; because UIApp starts with an uppercase letter, it really looks like you're calling a class method whereas addStatusBarImageNamed:removeOnAbnormalExit: is an instance method maybe you should change the text to [ self addStatusBarImageNamed: @"NAME" removeOnAbnormalExit: YES ]; or [ appInstance addStatusBarImageNamed: @"NAME" removeOnAbnormalExit: YES ]; {77} http://safari.oreilly.com:80/9780596518554/application_badges; well, in fact the real solution to the UIApp "misunderstanding" is that maybe you should introduce that UIApp stands for the shared UIApplication instance you could do it in the UIKit introductiond and remind it when it is used for the first time in the status bar manipulations chapter [90] Example 4-1 and 4-2; I am reading the Safari Books Online version of this book. All instances of (struct _ _GSEvent *)event; cause a compiler error and should be changed to (struct _GSEvent *)event; {153} http://safari.oreilly.com:80/9780596518554/advanced_uikit_design; instead of suggesting using mouseDown/mouseUp, you should mention UISegmentedControl's delegate methods: segmentedControl:selectedSegmentChanged: segmentedControlDisclosureButtonClicked: everywhere in general Cocoa programming books/tutorials delegates are preferred over subclassing {157} Preferences Table section; the section fails to detail - (int)preferencesTable:(UIPreferencesTable *)aTable numberOfRowsInGroup:(int)group; as part of the data source delegates. [191] http://safari.oreilly.com/9780596518554/section_lists; - (UITableCell *) table: (UITable *)table cellForRow: (int)row column: (int)col reusing: (BOOL) reusing { return [ files objectAtIndex: row ]; } although the book text doesn't mention this data source explicitly, it is illustrated in the companion example, however the signature is wrong. the "reusing" parameter is an id, which corresponds to a previous cell the table is going to recycle. cell recycling is enabled by invoking setReusesTableCells:YES on a table