【问题标题】:How to get Model class object values while typeCasting it in nsarray?如何在 nsarray 中进行类型转换时获取模型类对象值?
【发布时间】:2016-09-12 06:16:18
【问题描述】:

我 typeCast Product(创建对象的模型类的名称)类与数组(NSArray 的对象,其中包含从数据库中获取的数据)。当我想将项目类对象的值设置为 NSMutableDictionary 即 @ 987654323@ 应用程序崩溃。

entityDescription = [NSEntityDescription entityForName:@"Product" inManagedObjectContext:appDelegate.managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSSortDescriptor *sd = [[NSSortDescriptor alloc] initWithKey:@"prodId" ascending:NO];
request.sortDescriptors = @[sd];
[request setPredicate: [NSPredicate predicateWithFormat:@"active = %@ AND isDeletedProd = %@",@1,@0]];
_fetchedResultController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:appDelegate.managedObjectContext sectionNameKeyPath:nil cacheName:nil];

_fetchedResultController.delegate = self;
request.resultType = NSDictionaryResultType;

NSError *error;
[_fetchedResultController performFetch:&error];
arrdata = [self.fetchedResultController fetchedObjects];

这段代码是我用来获取数据的,然后想把它转换成产品。

Product *arrProd = (Product *)arrdata;

然后使用下面给出的方法将 arrProd 传递到 json 中。

[[ServerSyncUtil sharedInstance] syncProduct:arrProd withHandler:^(BOOL success,NSData *data , NSError *error)
 {


 }];

这都是什么方法..

-(void)syncProduct:(Product *)product withHandler:(syncHandler)handler {
    NSMutableArray *products = [NSMutableArray array];
    [products addObject:[self addProduct:product]];
    [self uploadProducts:products withHandler:handler];
}

然后调用addProduct方法。

-(NSDictionary *) addProduct:(Product *) product {
    NSMutableDictionary *data = [NSMutableDictionary dictionary];
    NSLog(@"%@",product);
    [data setObject:product.prodName forKey:kProductName];
    [data setObject:product.desc ? product.desc:@"" forKey:kDescription];
    return datal
}

这里当想将setObject放入数组数据应用程序崩溃了。

【问题讨论】:

  • 请添加一些代码。
  • data setObject:product.desc ? product.desc:@"" forKey:kDescription]; 崩溃了?
  • 是的,它会崩溃。实际上我认为 product.prodName 没有任何价值。但在产品中它有价值。
  • 尝试使用虚拟值@"xyz" 而不是product.prodName,看看它是否仍然崩溃。顺便说一句,什么是崩溃,请也添加。
  • 如果我输入虚拟值,它的工作正常。使用 product.prodName 时崩溃是 2016-09-12 13:45:57.089 BQ[15363:247379] -[__NSArrayM prodName]: unrecognized selector sent to实例 0x7fcb89d60c40 2016-09-12 13:45:57.111 BQ[15363:247379] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSArrayM prodName]:无法识别的选择器发送到实例 0x7fcb89d60c40”

标签: ios core-data casting


【解决方案1】:

你已经有一个数组,你不需要创建一个新的。您试图将数组视为单个对象。你甚至调用变量arrdata 表示你知道它是一个数组,但你不把它当作一个数组。

改为使用:

NSArray *products = [self.fetchedResultController fetchedObjects];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    相关资源
    最近更新 更多