ClimbProj - student project

ClimbProj is an app for rock climbers! More specifically, it's a personal note-taking app for any projects that a climber is working on. A project is a climbing route that requires multiple tries and sometimes long periods of time to complete. 

This app is actually a sub-function of a larger app I'm developing, SuperBeta: an interactive guide for outdoor climbing. Since the functionality is a lot more simple, however, I'm trying to focus on learning the basics of objective C and also learning how to customize the UI through Xcode. 

Below is an early sketch and a test walkthrough is available here. Pretty much, the functions are:

  • Add a new route
    A route requires at least one image. You can add a title, a difficulty grading, a quality grading, and tie it to a location. You can also add supplemental information like a description, categorize the type of climb it is, etc. If possible, I'd also like the user to be able to trace the route onto the photo.
  • Take notes on your progress
    On routes you've already recorded, you can make notes for each attempt you make. For example, I can say I tried the route again last Sunday and got two moves further, but still fall around 70% through.

ClimbProj - image 1 - student project  ClimbProj - image 2 - student project

Status — 

  • 5/5/13
    So I've only been able to work on this in spurts, but so far here's what I've got!

    - You can take a photo, add the name of a route, and it notes the GPS location with the photo.
    - It uses a custom font! 
    - You can rate the quality of the route using EDStarRating.
    - You can rate the difficulty of the route using a vertical slider.
    - Upon hitting "Save" it pushes the data to an email.
    - I spent a bunch of time customizing the look of these things. 

    Issues so far: 
    - Haven't been able to successfully save the actual image as the attachment of the email.
    - Ideally, I'd like it to save to a database instead of send an email.
    - I have no idea how to start tackling the issue of making it a saved route and having a list of a user's saved routes, and then managing said routes (make progress notes, delete routes, etc.). 

    ClimbProj - image 3 - student project

    Lots to do. Next I'm going to tackle the "Add beta" screen, for saving additional info about the route.

  • 5/6/13
    Quick update/problem. My friend set this part up for me: tapping on "Set location" opens a nested table of nearby locations. I'm able to update the UIButton's label to that parent location, and the main route name label as well. But, I can't quite figure out how to save that to my route classes's parent.

    My code for when the route is selected is: 

        // Save the parent area's name also
       NSString * parentName = item.itemText.text; = parentName;  // returns (null)

       // Set the UILabel text for the area
       self.chooseRouteButton.titleLabel.text = parentName;

    And the classes on the routeToSave:

       @property (nonatomic, retain) NSString * name;
       @property (nonatomic, retain) Area *parentArea;

    And for parentArea:

       @property (nonatomic, retain) NSString * name;

    I think my syntax is just off for the bolded line there. Any thoughts?

    ClimbProj - image 4 - student project

  • 5/20/13
    Progress — 
    Well! I believe I figured out the above problem, but it's led to another, bigger, problem... More on that later. In the meantime, I was also able to add a new view controller for entering the "beta" or description about the route. It slides up from the bottom. There's also a view controller that slides right to left for picking a climbing area nearby out of a list. 

    The main issue I've hit, was that I had to modify my NSManagedObject Subclasses. I had route.h and route.m, and needed to add a parentName field (which caused the above problem) and a description field to it. So, I went into the .xcdatamodel, added the attributes, rebuilt the classes, and now I get an error on compile. It's — 

    "The model used to open the store is incompatible with the one used to create the store"

    This is on StackOverflow here, but I can't get any of the solutions to work. I'm not quite sure what I'm doing wrong, but I've had to put the project on hold while I finish up a big presentation for my real job. I'm hoping to pick this back up this weekend though. Any suggestions on ways to tackle that Core Data / NSManagedObject subclass problem would be stellar though!

  • 6/5/13
    Progress — So, I figured out the above problem! I had modified the .xcdatamodel and tried to manually change the Route.h and Route.m files. Incorrect. Apparently the proper way to do this, is to create a new version of your .xcdatamodel, and in the appdelegate files, tell the app how to properly migrate the data to the new version.

    I haven't done a lot since last time. The "beta view controller" now actually works. You can type in notes about your project and it saves it. I'm not quite sure how I want to add the feature for categorizing the route yet, though. 

    Also, hitting "Save" on the entire route will push all the data to an email. I'd like to switch this to save to a .json file or a persistent store somewhere. I haven't yet figured out how to attach the image to the email either. 

    My weirdest issue right now: at the top of the screen, you can tap on the name to enter it and it will pull up a list of possible names, or let you add a new one. This still works fine, but for some reason on exiting out of the field, the screen slides left and you end up on a blank screen! Not sure how this happened, or how to change it. I've pinpointed where it happens, though: 

    - (IBAction)enterChosenRoute:(NSString*)routeName {

        // Save to core data = routeName;
       self.routeToSave.parentName =;
        NSLog(@"parentals = %@", self.routeToSave.parentName);
       NSLog(@"route is = %@", routeName);    

        // Clean up UI
       self.autocompleteTableView.hidden = YES;

    Right where it says "Blerg" is where the screen swipes over unnecessarily. Any thoughts? Here's an example screencast. The slide-over issue shows up at the end. (Note: the whole background should be the image taken by the camera, but that doesn't show up in simulator mode.)


  • 6/21/13
    Oops, a little late on my update here! I fixed the swipe-over problem mentioned above. I had a stray view controller on my storyboard, and it was switching over to that.

    In other news, I also finally was able to sync this to my phone and test there — huzzah! I've since added a drawing mechanism, so the sequence is now: take a picture, then you can draw a line to mark where the route is on a rock. Below is an example shot, from my niece. 

    The next hurdle is data: testing on my machine, I'm able to load local routes and areas through a .sqlite pre-loaded database. I'm working on getting it to load from a .json file though, but it takes a super long time, loads duplicates of each entry, and then crashes when trying to load it into the locations table. Once that works, my friend built a web front-end with a database, so I'll be figuring out how to make the "save" button write to that!

    ClimbProj - image 5 - student project

  • 1/2/14
    All new updates will be in the iOS7 class, over here!
Trish Ang

Designer slash developer.