iOS SDK, Objective-C, пригодный только для показа одной ячейки - PullRequest
0 голосов
/ 26 февраля 2012

У меня есть текстовое поле, которое вводит пользователь, затем я сохраняю его с помощью NSKeyedArchiver и вытаскиваю его для просмотра на столе, но каждый раз, когда я вписываю что-то в текстовое поле и сохраняю его, оно заменяет первый элемент в ячейке.Я хочу добавить его в таблицу.

в NewEntry.m, где я сохраняю данные с помощью

- (IBAction)saveButton:(id)sender {




int i = selectedSegment.selectedSegmentIndex;

app = [[UIApplication sharedApplication] delegate];

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

[userDefaults setInteger:i  forKey:@"category"];





if (i == 0) {

   // [userDefaults setObject:titlefield.text forKey: @"titlehomework"];
// [userDefaults setObject:detailstextfield.text forKey:@"detailshomework"];

    NSMutableArray *contactArray;

    contactArray = [[NSMutableArray alloc] init];
    [contactArray addObject:titlefield.text];
    [contactArray addObject:detailstextfield.text];

    [NSKeyedArchiver archiveRootObject: 
     contactArray toFile:datafilePath];


}

else if(selectedSegment.selectedSegmentIndex == 1) {
    [userDefaults setObject:titlefield.text forKey:@"titletextprojects"];
[userDefaults setObject:detailstextfield.text forKey:@"detailsprojects"];

}
else if (selectedSegment.selectedSegmentIndex == 2){
    [userDefaults setObject:titlefield.text forKey:@"titletextappointments"];
    [userDefaults setObject:detailstextfield.text forKey:@"detailsappointments"];
}
else if (selectedSegment.selectedSegmentIndex == 3){
    [userDefaults setObject:titlefield.text forKey:@"titletextevents"];
    [userDefaults setObject:detailstextfield.text forKey:@"detailsevents"];

}

else if (selectedSegment.selectedSegmentIndex == 4){
    [userDefaults setObject:titlefield.text forKey:@"titletexttodolist"];
    [userDefaults setObject:detailstextfield.text forKey:@"detailstodolist"];
}

/*[userDefaults synchronize];
titlefield.text =@" ";
detailstextfield.text =@" ";
NSLog(@"selected segment %i", i);*/

/* UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Task saved!" message:@"You're all done." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, selectedSegment.selectedSegmentIndex];
[alert show];*/

[[NSNotificationCenter defaultCenter] postNotificationName:@"ValuesChanged"
                                                    object:self];


[self dismissModalViewControllerAnimated:YES];



}

NewEntry ViewDidLoad:

- (void)viewDidLoad
{
[super viewDidLoad];
if (__managedObjectContext == nil) 
{ 
    __managedObjectContext = [(StaticTableAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSLog(@"After managedObjectContext_: %@",  __managedObjectContext);
}




NSFileManager *filemgr;
NSString *docsDir;
NSArray *dirPaths;

filemgr = [NSFileManager defaultManager];

// Get the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains(
                                               NSDocumentDirectory, NSUserDomainMask, YES);

docsDir = [dirPaths objectAtIndex:0];

// Build the path to the data file
datafilePath = [[NSString alloc] initWithString: [docsDir 
                                                  stringByAppendingPathComponent: @"data.archive"]];

// Check if the file already exists
if ([filemgr fileExistsAtPath: datafilePath])
{
    NSMutableArray *dataArray;

    dataArray = [NSKeyedUnarchiver 
                 unarchiveObjectWithFile: datafilePath];

    //titlefield.text = [dataArray objectAtIndex:0];
  //  detailstextfield.text = [dataArray objectAtIndex:1];

}





}

новая запись ViewDidUnload:

 - (void)viewDidUnload
{


[self setTitleTextfield:nil];
[self setCategory:nil];
[self setDetailstextfield:nil];
[self setTitlefield:nil];
[self setTitlefield:nil];
[self setSelectedSegment:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;

}

А в контроллере таблицы я называю это здесь: tableview:

- (void)viewDidLoad
{
[super viewDidLoad];
//  [self fetchRecords];  
if(tablesubtitles == nil && tabledata == nil){
tablesubtitles = [[NSMutableArray alloc]init];

tabledata = [[NSMutableArray alloc] init];

}    

NSFileManager *filemgr;
NSString *docsDir;
NSArray *dirPaths;

filemgr = [NSFileManager defaultManager];

// Get the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains(
                                               NSDocumentDirectory, NSUserDomainMask, YES);

docsDir = [dirPaths objectAtIndex:0];

// Build the path to the data file
datafilePath = [[NSString alloc] initWithString: [docsDir 
                                                  stringByAppendingPathComponent: @"data.archive"]];


// Check if the file already exists
if ([filemgr fileExistsAtPath: datafilePath])
{
    NSMutableArray *dataArray;

    dataArray = [NSKeyedUnarchiver 
                 unarchiveObjectWithFile: datafilePath];


    titlestring = [dataArray objectAtIndex:0 ];
    detailsstring = [dataArray objectAtIndex:1];



    [tabledata addObject:titlestring];
    [tablesubtitles addObject:detailsstring];
    }






}

и:

- (UITableViewCell *)tableView:(UITableView *)tableView  cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{

UITableViewCell *cell = nil;

cell = [tableView dequeueReusableCellWithIdentifier:@"homeworkcell"];


if(cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"homework"];

 }



NSString *cellValue = [tabledata objectAtIndex:indexPath.row];

NSString *subtitle = [tablesubtitles objectAtIndex:indexPath.row];




cell.textLabel.text= cellValue;

cell.detailTextLabel.text= subtitle;

cell.textLabel.font = [UIFont systemFontOfSize:14.0];
cell.textLabel.backgroundColor    =   [ UIColor clearColor];
cell.detailTextLabel.backgroundColor = [UIColor clearColor];       



    //[tabledata addObjectser.title];
    //[tabledata addObject:user.detai/s];   

//static NSString *CellIdentifier = @"Cell";



// Configure the cell.

//-----------------------------------------START----------------------------Set image of cell----
cellImage = [UIImage imageNamed:@"checkboxblank.png"];

cell.imageView.image = cellImage;

//--------------------------------------------END---------------------------end set image of cell--  

return cell;


}

************* UPDATE ********** Таким образом, в saveButton должно быть:

  NSMutableArray *contactArray;
   contactArray = [NSKeyedUnarchiver 
       unarchiveObjectWithFile: datafilePath];

   // contactArray = [[NSMutableArray alloc] init];
    [contactArray addObject:titlefield.text];
    [contactArray addObject:detailstextfield.text];

    [NSKeyedArchiver archiveRootObject: 
     contactArray toFile:datafilePath];

    // NSDictionary *stuff;

1 Ответ

1 голос
/ 26 февраля 2012

Проблема в том, что вы создаете новый изменяемый массив, помещаете в него один элемент, а затем архивируете этот массив в свой файл. Это заменит то, что было раньше.

Чтобы добавить новый элемент, необходимо сначала разархивировать массив, добавить в этот массив, а затем заархивировать новый массив.

Кажется, здесь также есть некоторый код основных данных, мало смысла в том, чтобы делать свое собственное архивирование, если вы собираетесь использовать основные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...