2015-10-19 99 views
0

我无法弄清楚为什么我无法设置PFObject的实例的值。它在应用程序的其他地方成功运行,但在这个视图中,我必须做出错误的事情。我真的很感谢你的帮助,弄清楚我错过了什么。谢谢。初始化对象时出错。无法将值设置为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中设置对象bc它是零,应用程序崩溃。

下面应该是你需要的所有和更多的代码,但让我知道你有问题或建议。谢谢!:

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 
+3

您在初始化ABC对象的位置? – Pawan

+0

他不是。刚刚看到您的评论后,我的答案,但我会删除我的,如果你张贴你的。 –

+0

谢谢@pawan。你是对的,但我不确定在哪里/如何。尝试这样做时出现错误。 – user2985200

回答

1

ABC不被任何初始化。你声明它,但它没有被初始化。所以设置BC.type实际上并没有设置任何东西。

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

+0

谢谢杰克。你是对的,我猜我不是,但我无法弄清楚它的语法。添加aBC =新ABC();正如你建议我得到的警告: – user2985200

+0

先发制人的后.... ....全文评论谢谢杰克。你是对的,我猜我不是,但我无法弄清楚它的语法。添加aBC =新ABC();正如你所建议的那样,我会得到警告:“使用未声明的标识符'aBC'是否意味着'_aBC'?”如果我改为写ABC * aBC = [[ABC alloc] init],我得到警告“未使用”(未使用的标识符'new'),看起来像是C++ vs objective c问题。变量aBC“ – user2985200

+0

Ahh,对不起,应该是_aBC = [[ABC alloc] init];或者_aBC = [ABC new];错误的语法,用C++帮助一个朋友,我会编辑我的答案。尝试不工作,因为您正在定义aBC的新本地实例,并且您的方法正在使用该属性。_aBC = [ABC新];可能无法正常工作...我从来没有尝试过使用自定义类,所以我不确定它是否会自动调用[[ABC alloc] init]; ,不过我认为这样做可以做到这一点,因为您可以使用PFObject和ABC继承PFObject。 –