IOS/Objective-C:从 NSManagedObject 构建 NSDictionary

IOS/Objective-C: Build NSDictionary from NSManagedObject

我正在尝试从 NSManagedObject 构建 NSDictionary。我的印象是你可以这样做: NSMutableDictionary *myDict; [myDict setObject:self.title forKey:@"title"]; }

因为字典不能包含 nil 值,所以我先测试 nil。但是,当我使用中断验证属性是否具有值时,当我构建字典时它为零。它使用断点显示为 nil,并以 NULL 形式记录到控制台。希望有人确认以下是创建字典的有效方法,如果是这样,为什么字典会是零?

NSString *title = @"Test";
NSNumber *complete = @1;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *lasttouchedstr =[dateFormatter stringFromDate:[NSDate date]];

 NSMutableDictionary *myDict;
     if (self.title.length>=1) {
    [myDict setObject:self.title forKey:@"title"];
     }
    if (![self.complete isKindOfClass:[NSNull class]]) {
        [myDict setObject:self.complete forKey:@"complete"];
    }
    if (![self.lasttouched isKindOfClass:[NSNull class]]) {
        [myDict setObject:lasttouchedstr forKey:@"lasttouchedstr"];
    }
NSLog(@"myDict is:%@",myDict)//Logs as NULL
    return myDict;

提前感谢您的任何建议。

NSMutableDictionary *myDict; 声明值但不初始化它。你需要

NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init];

其次,托管对象不会为其任何属性返回值 NSNull。您需要改为检查 != nil。有关 null 和 nils 之间差异的详细解释,请参见 here