【问题标题】:Error initializing object. Can't set value to PFObject初始化对象时出错。无法将值设置为 PFObject
【发布时间】:2015-10-19 06:36:50
【问题描述】:

我不明白为什么我无法设置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 中设置对象,因为它为 nil,应用程序崩溃。

下面应该是您需要的全部和更多代码,但如果您有任何问题或建议,请告诉我。谢谢!:

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

【问题讨论】:

  • 你在哪里初始化 ABC 对象?
  • 他不是。发表我的答案后才看到你的评论,但如果你发表你的,我会删除我的。
  • 谢谢@pawan。你是对的,但我不确定在哪里/如何。尝试这样做时出现错误。

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


【解决方案1】:

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

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

【讨论】:

  • 谢谢杰克。你是对的,我想我不是,但我也无法弄清楚这样做的语法。添加 aBC = new ABC();正如你所建议的那样,我收到了警告:
  • 先发制人的帖子.... 完整评论 谢谢杰克。你是对的,我想我不是,但我也无法弄清楚这样做的语法。添加 aBC = new ABC();正如您所建议的那样,我收到警告:“使用未声明的标识符'aBC'您的意思是'_aBC'吗?”如果我更改为 _aBC,我会收到警告“使用未声明的标识符‘新’。这似乎是 C++ 与目标 c 的问题。如果我改为编写 ABC *aBC = [[ABC alloc]init]; 我收到警告“未使用变量 aBC"
  • 啊,对不起。它应该是 _aBC = [[ABC alloc] init];或 _aBC = [ABC 新];语法错误,一直在用 C++ 帮助朋友。我会编辑我的答案。您尝试的最后一个方法不起作用,因为您正在定义 aBC 的新本地实例,并且您的方法正在使用该属性。 _aBC = [ABC 新];也可能不起作用...我从未尝试过使用自定义类,所以我不确定它是否仍会自动调用 [[ABC alloc] init]; , 虽然我认为它会因为你可以用 PFObject 和 ABC 继承自 PFObject 来做到这一点。
  • 谢谢杰克。是的,_aBC = [[ABC alloc] init];工作。就像: - (ABC *)aBC { if (!_aBC) { _aBC = [[ABC alloc] init]; } 返回 _aBC; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 2015-03-19
  • 2020-02-01
  • 2018-08-07
  • 1970-01-01
  • 2014-07-10
  • 2011-12-27
相关资源
最近更新 更多