初始化对象时出错。无法将值设置为PFObject

时间:2015-10-19 06:36:50

标签: ios objective-c parse-platform properties null

我无法弄清楚为什么我无法设置PFObject实例的值。它在应用程序的其他地方成功运行,但我必须在此视图中做错事。我非常感谢你的帮助,弄清楚我错过了什么。感谢。

基本上

self.ABC.type = @"Frustrated";
NSLog(@"why is this null? -----> %@",self.ABC.type);
2015-10-18 18:26:29.277 XX [885:109003] why is this null?  -----> (null)

为什么没有分配价值?它应该记录为...... I'm not null or frustrating... I'm working, see -----> Frustrated !!!!!!,但它无效!

因此我无法在Parse中设置对象,但是应用程序崩溃了。

以下应该是您需要的所有代码,但请告诉我您有问题或建议。谢谢!

FCollectionViewController.m:

#import "FCollectionViewController.h"
#import "FCell.h"
#import "SectionHeaderView.h"

#import "MBProgressHUD.h"

#import "Helper.h"

@interface FCollectionViewController()
 <UICollectionViewDelegate, MBProgressHUDDelegate>

@property (nonatomic, strong) NSDictionary *presetsDictionary;
@property (nonatomic, strong) NSArray *presets;
@property (nonatomic, strong) NSIndexPath *textViewIndexPath;
@property (nonatomic, strong) FCell *fCell;

@property (nonatomic, strong) MBProgressHUD *HUD;
@property (nonatomic, strong) NSArray *headTitleArray;

@end

@implementation FCollectionViewController


- (void)viewDidLoad {
    [super viewDidLoad];
    self.headTitleArray = [NSArray arrayWithObjects:
                           @"type",
                           @"model",
                           @"feature", nil];
    PFQuery *query = [PFQuery queryWithClassName:@"Presets"];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        NSMutableArray *keys = [[NSMutableArray alloc] init];
        NSMutableArray *values = [[NSMutableArray alloc] init];

        for (PFObject *obj in objects) {
            [keys addObject:[obj objectForKey:@"key"]];
            [values addObject:[obj objectForKey:@"value"]];
        }
        self.presetsDictionary = [NSDictionary dictionaryWithObjects:values forKeys:keys];

        self.presets = [[NSMutableArray alloc] initWithObjects:
                            [self.presetsDictionary objectForKey:@"type"],
                            [self.presetsDictionary objectForKey:@"model"],
                            [self.presetsDictionary objectForKey:@"feature"],nil];
        NSLog(@"self.presets ----> %@", self.presets);
        [self.collectionView reloadData];
    }];
}


- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return [self.presets count];
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return  [self.presets[section] count];
}

- (UICollectionReusableView*)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
    UICollectionReusableView * view = nil;

    if ([kind isEqualToString:UICollectionElementKindSectionHeader])
    {
        ItemSectionHeaderView *header = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader                                                      withReuseIdentifier:NSStringFromClass([ItemSectionHeaderView class])
                                                                                        forIndexPath:indexPath];
        header.captionLabel.text = self.headTitleArray[indexPath.section];
        view = header;
    }
    return view;
}


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell;

    FCell *aCell = (FCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"fCell" forIndexPath:indexPath];
    aCell.label.text = self.presets[indexPath.section][indexPath.row];
    aCell.label.textAlignment = NSTextAlignmentCenter;
    cell = aCell;
    return cell;
}



- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CGSize size;
     ....
    return size;
}

#pragma mark <UICollectionViewDelegate>

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
  NSArray * selectedRows = self.collectionView.indexPathsForSelectedItems;

  for (NSIndexPath * selectedRow in selectedRows) {
    if ((selectedRow.section == indexPath.section) && (selectedRow.row != indexPath.row)) {
      [self.collectionView deselectItemAtIndexPath:selectedRow animated:NO];
    }
  }
    switch (indexPath.section) {
    case 0:
      self.aBC.type = @"Frustrated";
      NSLog(@"why isn't this being assigned? -----> %@",self.ABC.type);
      break;
    case 1:
      self.aBC.model = self.presets[indexPath.section][indexPath.row];
      NSLog(@"why is this null?!!!! -----> %@",self.ABC.model);
      NSLog(@"this DOES log the value I want!! -----> %@",self.presets[indexPath.section][indexPath.row]);
      break;
    case 2:
      ...
    default:
      break;
    }
}

FCollectionViewController.h:

#import <UIKit/UIKit.h>
#import "ABC.h"

@interface FCollectionViewController : UICollectionViewController
//<UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>

@property (nonatomic, strong) ABC *aBC;
@end

ABC.h:

#import <Foundation/Foundation.h>

@interface ABC : NSObject

@property (nonatomic, strong) NSString *type;
@property (nonatomic, strong) NSString *model;
@property (nonatomic, strong) NSString *feature;
@property (nonatomic, strong) PFObject *pfObj;
@property (nonatomic, strong) PFUser *user;

- (id)initWithPFObject:(PFObject *)anObject;

@end

ABC.m:

#import "ABC.h"

@implementation ABC

- (id)initWithPFObject:(PFObject *)anObject
{
    if(self = [super init])
    {
        [anObject fetchIfNeeded];
        self.pfObj = anObject;
        self.type = [anObject objectForKey:@"type"];
        self.model = [anObject objectForKey:@"model"];
        ...
    }
    return self;
}

@end

FCell.h:

#import <UIKit/UIKit.h>

@interface FCell : UICollectionViewCell

@property (weak, nonatomic) IBOutlet UILabel *label;

@end

FCell.m:

#import "FCell.h"

@implementation FCell

-(void)setHighlighted:(BOOL)highlighted
{
  [super setHighlighted:highlighted];
  self.selectedBackgroundView = [[UIView alloc] initWithFrame:self.frame];
  self.selectedBackgroundView.backgroundColor = [UIColor darkGrayColor];

  [self setNeedsDisplay];
}

@end

1 个答案:

答案 0 :(得分:1)

aBC未在任何地方初始化。你声明它,但它没有初始化。所以设置aBC.type实际上并没有设置任何东西。

在viewDidLoad方法中添加self.aBC = [[ABC alloc] init];