jaaydenh / todoList

iOS Todo List app
0 stars 1 forks source link

[iOS Bootcamp] Todo List - Review request #1

Open jaaydenh opened 11 years ago

jaaydenh commented 11 years ago

I got a bit over ambitious trying to implement the swipe gesture for delete along with other gestures I was trying to do. It should be functional but with some UI visual problems here and there. I wanted to have the keyboard immediately pop up when adding a new item but ran out of time. Also, I wanted separate list sections to move items between similar to app.do where one list is for today, tomorrow, someday, upcoming.

I have a conflict in the way I am doing deletes because I have 2 different methods of delete working at the same time which is probably confusing.

/cc @nesquena @timothy1ee

timothy1ee commented 11 years ago

Great, nice work! Linking the cells with the underlying todo model was a good way to keep the model objects updated. Why don't you just disable the native delete gesture?

You should implement saving/restoring todo items. Use either NSUserDefaults or file I/O, NSArray has a built-in helper to load/save itself to disk. NSUserDefaults is a very commonly used tool, you should practice using it.

The next level is to be able to implement the multi-line to do item. It's an illustration of what it takes to really fine tune a UI. It's an intermediate level task. Not incredibly difficult, but may take you as long as the rest of the assignment.

TableViewCell* editCell;
for (TableViewCell* cell in _tableView.visibleCells) {
    if (cell.todoItem == toDoItem) {
        editCell = cell;
        break;
    }
}

You can directly fetch the cell: [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];

Here's my checklist of things I'm looking at when I'm reviewing this project.

jaaydenh commented 11 years ago

Tim,

For the todo app I was a little too ambitious trying to get the various gesture effects like the Clear app. Probably should have stuck to mockups in the assignment so I was sure I could get that working first. This reason I kept the native delete gesture is because the only way I knew how to rearrange cells was in Edit mode and I didnt know how to remove the delete UI in edit move or implement the cell rearranging without using edit mode.

Also, for the group project, I am not sure if Suyash contacted you yet but he let me know he wanted to be an observer in the class as he felt he did not have enough time. Since at the moment it seems like I am working on the group project alone, I am wondering what you feel the goals are for the group project. For me, I am always working on my own projects alone so I was hoping to get some interaction with other members of the class for the project and would value that above working on any particular idea. However, I have already started the group project as designed in the wireframes and could probably complete a basic demo-able version of it in three weeks provided the upcoming assignments don't take more than 3-4 hours of work a piece.

Let me know what you think and if there are other projects in need of people or if the same has happens to others in the class maybe there are others in need of a project.

Thanks, Jaayden

On Sat, Oct 19, 2013 at 12:36 AM, Timothy Lee notifications@github.comwrote:

Great, nice work! Linking the cells with the underlying todo model was a good way to keep the model objects updated. Why don't you just disable the native delete gesture?

You should implement saving/restoring todo items. Use either NSUserDefaults or file I/O, NSArray has a built-in helper to load/save itself to disk. NSUserDefaults is a very commonly used tool, you should practice using it.

The next level is to be able to implement the multi-line to do item. It's an illustration of what it takes to really fine tune a UI. It's an intermediate level task. Not incredibly difficult, but may take you as long as the rest of the assignment.

-

Instead of:

TableViewCell* editCell; for (TableViewCell* cell in _tableView.visibleCells) { if (cell.todoItem == toDoItem) { editCell = cell; break; } }

You can directly fetch the cell: [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];

Note: there is a convenient method on NSMutableArray called exchangeObjectAtIndex:withObjectAtIndex:

It's common to dismiss the keyboard on scroll.

UIViewController has a property called editButtonItem that automatically tracks the states of the editing state of the UIViewController.

You should set up Auto Layout constraints on the table view and the cells.

Here's my checklist of things I'm looking at when I'm reviewing this project.

  • Is the Objective-C code styling consistent with standards?
  • Did you create a custom cell or use tableview prototypes? Either approach is fine.
  • In your custom cell, did you configure the Auto Layout properties? Or, if you didn't use AutoLayout, did you set the autoresizingMask to UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth.
  • How did you sync the UITextField changes with the underlying array of todo items? There are many options:
    • Set the view controller to be the delegate of each UITextField. Track the index of the UITextField using the tag property or objc_getAssociatedObject/objc_setAssociatedObject.
    • Set the cell to be the delegate of the UITextField and create a custom cell delegate.
    • How was persistence implemented?
    • NSUserDefaults
    • File system

— Reply to this email directly or view it on GitHubhttps://github.com/jaaydenh/todoList/issues/1#issuecomment-26645362 .

timothy1ee commented 11 years ago

Yes, Suyash emailed me today as well. Your project is definitely within scope for one person. The weekly projects ramp down in hours after the Twitter client. However, I agree that part of the point of the class was to be able to collaborate with others. I suggest that you collaborate with Raul, he's a good developer, seems motivated, and his group partner dropped out this week as well. I'll send an intro.

Tim

On Sun, Oct 20, 2013 at 8:16 PM, Jaayden notifications@github.com wrote:

Tim,

For the todo app I was a little too ambitious trying to get the various gesture effects like the Clear app. Probably should have stuck to mockups in the assignment so I was sure I could get that working first. This reason I kept the native delete gesture is because the only way I knew how to rearrange cells was in Edit mode and I didnt know how to remove the delete UI in edit move or implement the cell rearranging without using edit mode.

Also, for the group project, I am not sure if Suyash contacted you yet but he let me know he wanted to be an observer in the class as he felt he did not have enough time. Since at the moment it seems like I am working on the group project alone, I am wondering what you feel the goals are for the group project. For me, I am always working on my own projects alone so I was hoping to get some interaction with other members of the class for the project and would value that above working on any particular idea. However, I have already started the group project as designed in the wireframes and could probably complete a basic demo-able version of it in three weeks provided the upcoming assignments don't take more than 3-4 hours of work a piece.

Let me know what you think and if there are other projects in need of people or if the same has happens to others in the class maybe there are others in need of a project.

Thanks, Jaayden

On Sat, Oct 19, 2013 at 12:36 AM, Timothy Lee notifications@github.comwrote:

Great, nice work! Linking the cells with the underlying todo model was a good way to keep the model objects updated. Why don't you just disable the native delete gesture?

You should implement saving/restoring todo items. Use either NSUserDefaults or file I/O, NSArray has a built-in helper to load/save itself to disk. NSUserDefaults is a very commonly used tool, you should practice using it.

The next level is to be able to implement the multi-line to do item. It's an illustration of what it takes to really fine tune a UI. It's an intermediate level task. Not incredibly difficult, but may take you as long as the rest of the assignment.

Instead of:

TableViewCell* editCell; for (TableViewCell* cell in _tableView.visibleCells) { if (cell.todoItem == toDoItem) { editCell = cell; break; } }

You can directly fetch the cell: [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0

inSection:0]];

Note: there is a convenient method on NSMutableArray called

exchangeObjectAtIndex:withObjectAtIndex:

It's common to dismiss the keyboard on scroll.

UIViewController has a property called editButtonItem that automatically tracks the states of the editing state of the

UIViewController.

You should set up Auto Layout constraints on the table view and the cells.

Here's my checklist of things I'm looking at when I'm reviewing this project.

  • Is the Objective-C code styling consistent with standards?
  • Did you create a custom cell or use tableview prototypes? Either approach is fine.
  • In your custom cell, did you configure the Auto Layout properties? Or, if you didn't use AutoLayout, did you set the autoresizingMask to UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth.
  • How did you sync the UITextField changes with the underlying array of todo items? There are many options:
  • Set the view controller to be the delegate of each UITextField. Track the index of the UITextField using the tag property or objc_getAssociatedObject/objc_setAssociatedObject.
  • Set the cell to be the delegate of the UITextField and create a custom cell delegate.
  • How was persistence implemented?
  • NSUserDefaults
  • File system

— Reply to this email directly or view it on GitHub< https://github.com/jaaydenh/todoList/issues/1#issuecomment-26645362> .

— Reply to this email directly or view it on GitHubhttps://github.com/jaaydenh/todoList/issues/1#issuecomment-26690766 .

Timothy Lee CodePath, Co-founder 512-496-3481 http://thecodepath.com