【问题标题】:Can get members, but not count of NSMutableArray可以获取成员,但不计入 NSMutableArray
【发布时间】:2011-03-02 23:20:34
【问题描述】:

我正在从 CoreData 调用中填充 NSMutableArray。我可以获取第一个对象,但是当我尝试获取计数时,应用程序崩溃并显示Program received signal: “EXC_BAD_ACCESS”. 如何获取计数?

这是相关代码 - 我已经在它崩溃的那一行添加了注释。

- (void)viewDidLoad {
[super viewDidLoad];

managedObjectContext = [[MySingleton sharedInstance] managedObjectContext];

if (managedObjectContext != nil) {
    charactersRequest = [[NSFetchRequest alloc] init];
    charactersEntity = [NSEntityDescription entityForName:@"Character" inManagedObjectContext:managedObjectContext];
    [charactersEntity retain];
    [charactersRequest setEntity:charactersEntity];
    [charactersRequest retain];

    NSError *error;
    characters = [[managedObjectContext executeFetchRequest:charactersRequest error:&error] mutableCopy];
    if (characters == nil) {
        NSLog(@"Did not get results for characters: %@", error.localizedDescription);
    }
    else {          
        [characters retain];            
        NSLog(@"Found some character(s).");
        Character* character = (Character *)[characters objectAtIndex:0];
        NSLog(@"Name of first one: %@", character.name);
        NSLog(@"Found %@ character(s).", characters.count);  // Crashes on this line with - Program received signal:  “EXC_BAD_ACCESS”.
    }
}

}

以及头文件中之前的声明:

@interface CrowdViewController : UITableViewController {
NSManagedObjectContext *managedObjectContext;
NSFetchRequest *charactersRequest;
NSEntityDescription *charactersEntity;
NSMutableArray *characters;

}

我有点困惑,希望能知道发生了什么。

【问题讨论】:

    标签: iphone memory-management core-data crash nsmutablearray


    【解决方案1】:

    Count 是一个整数,所以在 NSLog 中使用时应该使用 %d

    NSArray Reference

    【讨论】:

    • 我在代码的其他地方使用了.count,并且在其他 NSMutableArrays 上也能正常工作。当我使用[characters count] 时,上面的代码也会崩溃。
    • 对不起,我知道错误。 NSLog 应该是 %d,它是一个整数。 NSLog(@"找到 %d 个字符。", characters.count); //
    • 正确的格式说明符实际上是 %lu,对于 unsigned long,因为 NSArray 的 count 方法返回 NSUInteger
    • 好奇:崩溃是由于尝试向NSUInteger 发送description 消息(这是%@ 所做的,并打印结果)引起的。这是错误的,因为NSUIntegers 不是对象;您只能向对象发送消息。您需要使用不同的说明符,例如 %lu 来打印 NSUInteger 值。完整列表见:developer.apple.com/iphone/library/documentation/Cocoa/…
    • 真的吗?我没有意识到这一点,因为 %d 总是为我工作
    【解决方案2】:

    造成现金是因为 count 是 NSArray 的一个方法,而不是一个属性,所以你不能使用点符号来调用它。因此,您必须使用括号表示法:

     NSLog(@"Found %d character(s).", [characters count]);
    

    如果您使用过许多确实使用点符号来调用方法的语言,那么这很容易犯错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 2010-11-07
      • 2017-07-15
      • 1970-01-01
      相关资源
      最近更新 更多