This closes issue #23 on GitHub. The issue was related to how we re-construct the view hierarchy after a low memory warning from the system. If the user had changed to a month different than the initial month when KalViewController was created, it would fail to find the appropriate KalTileView for the value that it had stored as the initially selected date. The solution is to re-cache the initially selected date when a low memory warning occurs. Original bug report by jgchristian: Steps to reproduce: 1. Start your Holiday app 2. Slide to the next month (i.e. not the current month) 3. Select an event and view the holiday details 4. When on the details screen, quit to the springboard by single clicking the home button (not double clicking to background). We need to force the device to want to reload the grid when we return - so you may need to do some memory intensive stuff - but not generally the case for me. 5. Relaunch the Holiday app. This returns you to the details screen 6. Now press back to return to the grid. Crash log below From the looks of the code this is happening because the 'logic' object is still on the next month (correct), but when loadView is triggered by the OS trying to re-instantiate the view it defaults to setting the current date on the grid - which was in the previous month so assertion fails as cell is nil. Thought about maintaining last user-selected date but started to get fiddly. 2011-02-02 08:20:24.961 Holiday[3471:307] Received memory warning. Level=2 2011-02-02 08:20:28.382 Holiday[3471:307] Assertion failure in -[KalMonthView tileForDate:], /Users/j.christian/dev/Kal/src/KalMonthView.m:84 2011-02-02 08:20:28.510 Holiday[3471:307] Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Failed to find corresponding tile for date 2/2/2011'
Prior to this commit, KalViewController used to clobber its 'title' property inherited from UIViewController in its loadView method. I changed this so that now it only sets a default title if the title property is nil. I modified both of the example apps to set the KalViewController's title explicitly. This makes it easier for clients of KalViewController to customize its behavior without resorting to subclassing or the even more drastic measure of modifying KalViewController's implementation. This closes issue #17 on GitHub.
A regression was introduced in SHA: 8fa33f4 where the KalViewController's delegate and dataSource properties were being retained by the setter implementation but were declared to be assigned properties. My intent was that these were weak references, and so this commit removes the retains. As a client of KalViewController, it is your responsibility to ensure that the lifetime of the KalViewController's delegate and dataSource properties has at least the same extent as the KalViewController object itself. This closes issue #18 on GitHub.
…th. (thanks Daniel Gindi)
… not filled correctly.
…isplayed for languages such as Russian which have a separate stand-alone form of the month name.
…l part to the bugfix. I wish I would have tested this sooner on the real device.
…time change occurred.
Root cause: If an application using Kal is suspended in the background for an extended period of time (specifically, crossing the midnight threshold), when the app is resumed, Kal will still think that "today" has not changed. In my original implementation, I had naively assumed that the app would never be used for such an extended period of time, but iOS 4.0 multitasking makes my assumption invalid. Solution: Listen for the UIApplicationSignificantTimeChangeNotification from the OS and respond appropriately by recaching today's date and refreshing the UI.
…EKEventStore using a GCD queue.
…o be refreshed. Added EKEventStoreChangedNotification handling to NativeCal example app.
- Refactored the project structure into 2 Xcode projects: one that builds the static library and one that builds an example app using Kal. - Switched over to the iOS 4.0 SDK (in preparation for EventKit demo and Retina Display support).
…'s corresponding tile can actually be found (i.e. it is visible)
1) When creating a KalViewController, you can now specify the initial selected date (before it always just displayed and selected today's date) 2) You can now send a message to KalViewController to show and select an arbitrary date (before you could only tell it to show today's date).
…o now shows how to push a details view controller when the user taps a holiday listed below the calendar.
-[UIView setAnimationsEnabled:] is *not* scoped to the UIView animation transaction. So if you turn off animations, make sure you turn them back on immediately after the animation is triggered.
This allows you to provide your own UITableViewDelegate or to override the configuration of the UITableView (row height, separator color, etc.)