Iphone 值在传递到另一个视图控制器时从托管对象中消失
我有一个使用核心数据的有点复杂的应用程序,除了一个数据似乎消失的实例外,它运行良好 我有一个托管对象类pitLayer,它有10个属性(字符串和数字)、一个显示属于父对象的所有pitLayer对象的视图控制器(viewLayers)和一个可以编辑(和创建)新pit层对象的视图控制器(editLayer) 当我创建一个新的pitLayer,然后返回到表视图时,所有属性都会正确地显示在表中。如果我立即返回editLayer,所有值都会正确显示 如果我用editLayer编辑另一个pitLayer,我将获得除2、硬度和BottomHardness(两个字符串)之外的所有属性的正确值,其中我仍然从编辑过的上一个pitLayer获得值 如果我第一次使用现有的pitLayer加载editLayer,则硬度和底部硬度返回nil,所有其他值返回先前存储的值 这些值存储正确,可以在viewLayers中获取并返回正确的值,但在editLayer中获取时,它们不会返回正确的值。它只有两个属性,其他8个似乎工作得很好 对调试这个有什么建议吗 以下是他们的设置:Iphone 值在传递到另一个视图控制器时从托管对象中消失,iphone,core-data,Iphone,Core Data,我有一个使用核心数据的有点复杂的应用程序,除了一个数据似乎消失的实例外,它运行良好 我有一个托管对象类pitLayer,它有10个属性(字符串和数字)、一个显示属于父对象的所有pitLayer对象的视图控制器(viewLayers)和一个可以编辑(和创建)新pit层对象的视图控制器(editLayer) 当我创建一个新的pitLayer,然后返回到表视图时,所有属性都会正确地显示在表中。如果我立即返回editLayer,所有值都会正确显示 如果我用editLayer编辑另一个pitLayer,我
-(void)pickerView:(UIPickerView*)pickerView didSelectRow:(NSInteger)row不完整项:(NSInteger)组件{
如果(组件==kGrainTypeComponent){
layer.grainType=[[grainTypeValues对象索引:行]valueForKey:@“代码”];
}else if(component==kSecondGrainTypeComponent){
layer.secondGrainType=[[grainTypeValues对象索引:行]valueForKey:@“代码”];
}else if(组件==kHardnessComponent){
layer.Hardware=[[hardnessValues objectAtIndex:row]valueForKey:@“代码”];
}else if(component==ksecondhardensscomponent){
layer.BottomHardware=[[hardnessValues objectAtIndex:row]valueForKey:@“代码”];
}
[可自检];
}
以下是它们以后无法检索到的地方:
-(void)resetDefaults{
if(edit == YES && layer != nil){//Edit an existing layer
if(layer.comments)
comments.text = layer.comments;
else
comments.text = @"";
if(layer.thickness){
thicknessSlider.value = [layer.thickness floatValue];
[self thicknessChanged];
}
if(layer.grainSize){
grainSizeSlider.value = [layer.grainSize floatValue];
[self grainSizeChanged];
}else{
grainSizeSlider.value = 0;
grainSizeLabel.text = @"";
}
if(layer.density){
densitySlider.value = [layer.density floatValue];
[self densityChanged];
}else{
densitySlider.value = 0;
densityLabel.text = @"";
}
NSString *type = layer.grainType;
NSString *secondType = layer.secondGrainType;
NSString *hardness = nil;
hardness = layer.hardness;
NSString *bottomHardness = nil;
bottomHardness = layer.bottomHardness;
NSString *lwc = layer.liquidWaterContent;
NSUInteger typeIndex = 0;
NSUInteger secondTypeIndex = 0;
NSUInteger hardnessIndex = 0;
NSUInteger bottomHardnessIndex = 0;
NSLog(@"type:%@, hardness: %@, bottom hardness: %@", type, hardness, bottomHardness);
if(type){
for(int i = 0; i < [grainTypeValues count]; i++){
if([[[grainTypeValues objectAtIndex:i] valueForKey:@"code"] isEqualToString: type]){
typeIndex = i;
break;
}
}
}
[picker selectRow:typeIndex inComponent:kGrainTypeComponent animated:NO];
if(secondType){
for(int i = 0; i < [grainTypeValues count]; i++){
if([[[grainTypeValues objectAtIndex:i] valueForKey:@"code"] isEqualToString:secondType]){
secondTypeIndex = i;
break;
}
}
}
[picker selectRow:secondTypeIndex inComponent:kSecondGrainTypeComponent animated:NO];
if(hardness){
for(int i = 0; i < [hardnessValues count]; i++){
if([[[hardnessValues objectAtIndex:i] valueForKey:@"code"] isEqualToString:hardness]){
hardnessIndex = i;
break;
}
}
}
[picker selectRow:hardnessIndex inComponent:kHardnessComponent animated:NO];
if(bottomHardness){
for(int i = 0; i < [hardnessValues count]; i++){
if([[[hardnessValues objectAtIndex:i] valueForKey:@"code"] isEqualToString:bottomHardness]){
bottomHardnessIndex = i;
break;
}
}
}
if(secondHardness)
[picker selectRow:bottomHardnessIndex inComponent:kSecondHardnessComponent animated:NO];
if(lwc){
for(int i = 0; i < [lwcValues count]; i++){
if([[[lwcValues objectAtIndex:i] valueForKey:@"code"] isEqualToString:lwc]){
lwcSlider.value = [[[lwcValues objectAtIndex:i] valueForKey:@"value"] floatValue];
lwcLabel.text = [[lwcValues objectAtIndex:i] valueForKey:@"name"];
break;
}
}
}else{
lwcSlider.value = 0;
lwcLabel.text = @"";
}
if(layer.formationDate){
datePicker.date = layer.formationDate;
[self dateChanged];
}else{
formationDate.text = @"";
datePicker.date = [NSDate date];
}
}else{//create a new layer
comments.text = @"";
thicknessSlider.value = 0;
thicknessLabel.text = @"0.0";
grainSizeSlider.value = 0;
grainSizeLabel.text = @"";
densityLabel.text = @"";
densitySlider.value = 0;
lwcLabel.text = @"";
lwcSlider.value = 0;
formationDate.text = @"";
datePicker.date = [NSDate date];
[picker selectRow:0 inComponent:kGrainTypeComponent animated:NO];
[picker selectRow:0 inComponent:kSecondGrainTypeComponent animated:NO];
[picker selectRow:0 inComponent:kHardnessComponent animated:NO];
if(secondHardness)
[picker selectRow:0 inComponent:kSecondHardnessComponent animated:NO];
}
thicknessUnitLabel.text = layer.parentPit.depthUnit;
locationUnitLabel.text = layer.parentPit.depthUnit;
densityUnitLabel.text = layer.parentPit.densityUnit;
if([layer.parentPit.densityUnit isEqualToString:@"kg/m3"]){
densitySlider.maximumValue = 1000;
densitySliderDecimalCutoff = 0;
}else{
densitySlider.maximumValue = 100;
densitySliderDecimalCutoff = 20;
}
topLabel.text = [NSString stringWithFormat:@"%1.1F", [[layer topLocation] floatValue]];
bottomLabel.text = [NSString stringWithFormat:@"%1.1F", [[layer bottomLocation] floatValue]];
-(无效)重置默认值{
如果(编辑==YES&&layer!=nil){//编辑现有层
如果(图层注释)
comments.text=layer.comments;
其他的
comments.text=@;
if(层厚度){
thicknesslider.value=[layer.thickness floatValue];
[自身厚度改变];
}
if(layer.grainSize){
grainSizeSlider.value=[layer.grainSize floatValue];
[自颗粒化改变];
}否则{
grainSizeSlider.value=0;
grainSizeLabel.text=@;
}
if(层密度){
densitySlider.value=[layer.density floatValue];
[自密度改变];
}否则{
densitySlider.value=0;
densityLabel.text=@;
}
NSString*type=layer.grainType;
NSString*secondType=layer.secondGrainType;
NSString*硬度=零;
硬度=层硬度;
NSString*底部硬度=零;
底部硬度=层。底部硬度;
NSString*lwc=layer.liquidWaterContent;
整数类型索引=0;
NSUInteger secondTypeIndex=0;
NSU整数hardnessIndex=0;
NSU整型底部硬度指数=0;
NSLog(@“类型:%@,硬度:%@,底部硬度:%@”,类型,硬度,底部硬度);
如果(类型){
对于(int i=0;i<[grainTypeValues计数];i++){
if([[grainTypeValues objectAtIndex:i]valueForKey:@“code”]IseQualtString:type]){
类型索引=i;
打破
}
}
}
[picker selectRow:typeIndex inComponent:kGrainTypeComponent:NO];
如果(第二类){
对于(int i=0;i<[grainTypeValues计数];i++){
if([[grainTypeValues对象索引:i]valueForKey:@“code”]isEqualToString:secondType]){
第二类指数=i;
打破
}
}
}
[picker selectRow:secondTypeIndex不完整项:kSecondGrainTypeComponent动画:否];
if(硬度){
对于(int i=0;i<[hardnessValues count];i++){
if([[[hardnessValues objectAtIndex:i]valueForKey:@“code”]IsequalString:Hardware]){
硬度指数=i;
打破
}
}
}
[picker selectRow:hardnessIndex非组件:Khardness组件动画:否];
if(底部硬度){
对于(int i=0;i<[hardnessValues count];i++){
if([[[hardnessValues objectAtIndex:i]valueForKey:@“code”]IsequalString:BottomHardware]){
底部硬度指数=i;
打破
}
}
}
if(第二硬度)
[picker selectRow:BottomHardennessIndex不完整项:kseCondhardenssComponent:否];
if(lwc){
对于(int i=0;i<[lwcValues count];i++){
if([[[lwcValues objectAtIndex:i]valueForKey:@“code”]isEqualToString:lwc]){
lwcSlider.value=[[[lwcValues objectAtIndex:i]valueForKey:@“value”]floatValue];
lwcLabel.text=[[lwcValues objectAtIndex:i]valueForKey:@“name”];
打破
}
}
}否则{
lwcSlider.value=0;
lwcLabel.text=@;
}
if(图层格式日期){
datePicker.date=layer.formationDate;
[自我更新];
}否则{
formationDate.text=@;
datePicker.date=[NSDate-date];
}
}else{//创建一个新层
comments.text=@;
thicknesslider.value=0;
thicknessLabel.text=@“0.0”;
grainSizeSlider.value=0;
grainSizeLabel.text=@;
densityLabel.text=@;
densitySlider.value=0;
lwcLabel.text=@;
lwcSlider.value=0;
formationDate.text=@;
datePicker.date=[NSDate-date];
[picker selectRow:0未组件:kGrainTypeComponent:否];
[选择器选择行:0不完整项:kSecondGrainTypeComponent动画