2016-01-21 2 views
0

У меня есть приложение, построенное в Xcode с использованием Objective-C, которое сохраняет данные на Parse.com. Пользователь отправляет воспоминания в базу данных parse.com.Отобразить количество строк (массив?) Из Parse в UIView UIViewController

Я пытаюсь отобразить количество (количество) воспоминаний, отправленных текущим пользователем.

Раскадровка Я хочу, чтобы это отображалось на UIViewController, и есть много места для одной строки текста внизу страницы. Итак, я вставил табличный вид из библиотеки объектов Xcode, а затем вставил ячейку просмотра таблицы с 1 прототипом Cell с идентификатором повторного использования «cellCount».

Я настроил ViewController как делегат и DataSource для UITableView, и я связал ячейку с файлом заголовка ViewController.

Я сейчас полностью застрял, и мне просто нужна помощь. Сегодня я проработал около 12 часов, поэтому, пожалуйста, пожалейте меня. Посмотрите, есть ли в моем коде некоторые очевидные ошибки. БЛАГОДАРЯ!!!

импорт "MemoriesViewController.h"

MemoriesViewController.h

#import <UIKit/UIKit.h> 
#import <Parse/Parse.h> 
#import "AppDelegate.h" 



    @interface MemoriesViewController : UIViewController <UITableViewDelegate, UITextViewDelegate, UITableViewDataSource> 

    @property (strong, nonatomic) IBOutlet UITableView *tableView; 

    @property (nonatomic, strong) PFQuery *query; 
    @property (nonatomic, strong) NSArray *mainArray; 

    @property (strong, nonatomic) IBOutlet UITableViewCell *cellCount; 
    @property (strong, nonatomic) IBOutlet UITextView *memoriesField; 

    - (IBAction)sendMemories:(UIButton *)sender; 
    - (IBAction)logOut:(id)sender; 

    @end 

MemoriesViewController.m

#import "MemoriesViewController.h" 
    @interface MemoriesViewController() 

    @end 

    @implementation MemoriesViewController 

    - (void)viewDidLoad { 
     [super viewDidLoad]; 
     [self.navigationController.navigationBar setHidden:NO]; 
     } 

    - (void)viewWillAppear:(BOOL)animated { 
      [super viewWillAppear:animated]; 

     PFUser *currentUser = [PFUser currentUser]; 
     if (currentUser) { 
      NSLog(@"Current user: %@", currentUser.username); 
     } 
     else { 
      [self performSegueWithIdentifier:@"showLogin" sender:self]; 
     } 
     self.memoriesField.delegate = self; 
     _mainArray = [[NSArray alloc] initWithObjects:@"one", nil]; 
    } 
    #pragma mark - Table view data source 

    - (NSInteger)tableView:(UITableView *)tableView numberOfSectionsInTableView:(NSInteger)section { 
     return [_mainArray count]; 
     } 
    - (UITableViewCell *)tableView:(UITableViewCell *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
     static NSString *CellIdentifier = @"Cell"; 

      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
      if (cell == nil) { 
       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
      } 
     PFQuery *query = [PFQuery queryWithClassName:@"Memories"]; 
     [query whereKey:@"senderName" equalTo:[[PFUser currentUser] username]]; 
     [query countObjectsInBackgroundWithBlock:^(int count, NSError *error) { 
      if (!error) 
       NSLog (@"You have %d Memories Saved", count); 
      return cell; 
    } 

    #pragma mark - IB Actions 

    - (IBAction)sendMemories:(UIButton *)sender { 

     PFObject *memories = [PFObject objectWithClassName:@"Memories"]; 
     memories[@"Memories"] = self.memoriesField.text; 
     [memories setObject:[[PFUser currentUser] username] forKey:@"senderName"]; 
     [memories saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
      if (succeeded){ 
       NSLog(@"succeeded"); 
       self.memoriesField.text = nil; 
      } 
      else{ 
       NSLog(@"problem"); 
       UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Our Apologies" message:@"Your Memory was not Recieved" preferredStyle:UIAlertControllerStyleAlert]; 

       UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"Ok" 
                     style:UIAlertActionStyleDefault 
                     handler:^(UIAlertAction * action) {}]; 

       [alert addAction: defaultAction]; 


      } 
     NSString *memories = [self.memoriesField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
      [self.view endEditing:YES]; 

     if ([memories length] == 0) 
     { 
      UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Memory Recieved!" message:@"" preferredStyle:UIAlertControllerStyleAlert]; 

      UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"Ok" 
                    style:UIAlertActionStyleDefault 
                    handler:^(UIAlertAction * action) {}]; 

      [alert addAction: defaultAction]; 
      [self presentViewController:alert animated:YES completion:nil]; 
     } 
     else { 
      [self.navigationController popToRootViewControllerAnimated:YES]; 
       } 
      }]; 
     } 

    - (IBAction)logOut:(id)sender { 
     [PFUser logOut]; 
     [self performSegueWithIdentifier:@"showLogin" sender:self]; 

    } 

    #pragma mark - UITextField Delegate Methods 

    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 

     if([text isEqualToString:@"\n"]) { 
      [textView resignFirstResponder]; 
      return NO; 
     } 

     return YES; 

    } 
    @end 
+0

Ошибка - Нет видимых @interface для «UITableViewCell» объявляет селектор «dequeueReusableCellWithIdentifier:» –

+0

У меня есть ощущение, что у меня есть вещи в неположенном месте , Я не уверен, что ViewDidLoad и ViewWillAppear упорядочены правильно или что у них есть правильные сегменты кода внутри них. –

+0

Почему вы используете табличное представление для отображения единственного значения? Почему не UILabel, например? https://developer.apple.com/library/ios/documentation/UIKit/Reference/UILabel_Class/ – fishinear

ответ

0

ОК, я не знаю о Parse.com, но мне кажется, что вы можете использовать UILabel вместо UITableView, который вы используете, сохраняя его в свойстве label. Тогда не будет запущен код, который вы должны задать текст метки:

PFQuery *query = [PFQuery queryWithClassName:@"Memories"]; 
    [query whereKey:@"senderName" equalTo:[[PFUser currentUser] username]]; 
    [query countObjectsInBackgroundWithBlock:^(int count, NSError *error) { 
     if (!error) { 
      NSLog (@"You have %d Memories Saved", count); 
      self.label.text = [NSString stringWithFormat:@"You have %d Memories Saved", count]; 
     } 
+0

ЭТО РАБОТАЕТ !!! HOLY CRAP IT WORKS !!! ТЫ ГЕНИЙ!!! –

Смежные вопросы