Resolved Table View Cell Text Help

Discussion in 'iOS Programming' started by iphonedude2008, Dec 4, 2012.

  1. iphonedude2008, Dec 4, 2012
    Last edited: Dec 6, 2012

    iphonedude2008 macrumors 65816


    Nov 7, 2009
    Irvine, CA
    I'm making my first app with table views and I am having trouble with the logic of it. I have a data source object with an array that contains various objects such as uiimage and nsurls pointing to word, pages, pdfs, ect. that are displayed by a uiwebview. However, before they are loaded, i want to show a table listing all the objects.
    The problem is, i dont know how to display a name in the uilabel for each cell. I want the user to be able to edit the name also.

    heres the code for the model
    #import <Foundation/Foundation.h>
    @interface CQStorageModel : NSObject<NSCoding>
    @property (strong, nonatomic) NSMutableArray *dataSource;
    @property (strong, nonatomic) NSURL *savingUrl;
    @property (strong, nonatomic) NSURL *appSupportUrl;
    - (id) initWithDataSource;
    - (void) saveDataSource;
    - (void) addProject: (NSMutableArray *) arry withName: (NSString *) string;
    - (void) removeProjectAtIndex: (NSUInteger) index;
    - (void) addObject: (id<NSCoding>) object toProjectAtIndex: (NSUInteger) index;
    - (void) removeObjectAtIndex: (NSUInteger) index1 inProjectAtIndex: (NSUInteger) index2;
    - (id) loadObjectAtIndex: (NSUInteger) index1 inProjectAtIndex: (NSUInteger) index2;
    implementation file
    #import "CQStorageModel.h"
    @implementation CQStorageModel
    - (void) encodeWithCoder:(NSCoder *)aCoder {
        [aCoder encodeObject:self.dataSource forKey:@"dataSource"];
        [aCoder encodeObject:self.savingUrl forKey:@"savingUrl"];
        [aCoder encodeObject:self.appSupportUrl forKey:@"APUrl"];
    - (id) initWithCoder:(NSCoder *)aDecoder {
        self = [super init];
        self.dataSource = [aDecoder decodeObjectForKey:@"dataSource"];
        self.savingUrl = [aDecoder decodeObjectForKey:@"savingUrl"];
        self.appSupportUrl = [aDecoder decodeObjectForKey:@"APUrl"];
        return self;
    - (id) initWithDataSource {
        self = [super init];
        if (self) {
            NSFileManager *fm = [[NSFileManager alloc]init];
            self.appSupportUrl = [fm URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
            if (!self.appSupportUrl)
                self.appSupportUrl = [fm URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil];
            self.savingUrl = [self.appSupportUrl URLByAppendingPathComponent:@"CQStorageModel.cqstm"];
            NSData *data = [[NSData alloc]initWithContentsOfURL:self.savingUrl];
            if (data)
            self = [NSKeyedUnarchiver unarchiveObjectWithData:data];
        return self;
    - (void) saveDataSource {
        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self];
        [data writeToURL:self.savingUrl atomically:NO];
    - (void) addProject: (NSMutableArray *) arry withName: (NSString *) string {
        [arry insertObject:string atIndex:0];
        [self.dataSource addObject:arry];
    - (void) removeProjectAtIndex:(NSUInteger)index {
        [self.dataSource removeObjectAtIndex:index];
    - (void) addObject:(id<NSCoding>)object toProjectAtIndex:(NSUInteger)index {
        [[self.dataSource objectAtIndex:index] addObject:object];
    - (void) removeObjectAtIndex:(NSUInteger)index1 inProjectAtIndex:(NSUInteger)index2 {
        if (index1 != 0)
            [[self.dataSource objectAtIndex:index2] removeObjectAtIndex:index1];
    - (id) loadObjectAtIndex:(NSUInteger)index1 inProjectAtIndex:(NSUInteger)index2 {
        id object = [[self.dataSource objectAtIndex:index2]objectAtIndex:index1];
        return object;
  2. Reason077 macrumors 68010


    Aug 14, 2007
    Well, looks like you've got your storage sorted. Now you need to implement the UITableViewDataSource protocol. You could extend CQStorageModel to implement UITableViewDataSource directly, or you could create a new class which calls into your CQStorageModel.

    The key methods you'll need to implement are:

    – tableView:numberOfRowsInSection:
    – tableView:cellForRowAtIndexPath:

    Then you need to pass your UITableViewDataSource object to the table view using:

    tableView.dataSource = myTableData;
  3. iphonedude2008 thread starter macrumors 65816


    Nov 7, 2009
    Irvine, CA
  4. MattInOz macrumors 68030


    Jan 19, 2006
    Have a look on Apple's Developer site for a Sample project called Doc Interaction. It's chock full of of file/url handling goodness.

Share This Page