Question

I am making a plist viewer and editor for iOS, but the problem I have it, that the values don't match to its key. Like I have this plist

{
        BuildMachineOSBuild = 12C54;
        CAProcessCanAccessGPU = 1;
        CFBundleAllowMixedLocalizations = 1;
        CFBundleDevelopmentRegion = English;
        CFBundleDisplayName = iAd;
        CFBundleExecutable = AdSheet;
        CFBundleIconFiles =         (
            "iAd.png",
            "iAd@2x.png"
        );
        CFBundleIcons =         {
            CFBundlePrimaryIcon =             {
                CFBundleIconFiles =                 (
                    "iAd.png",
                    "iAd@2x.png"
                );
                UIPrerenderedIcon = 0;
            };
        };
        CFBundleIdentifier = "com.apple.AdSheetPhone";
        CFBundleInfoDictionaryVersion = "6.0";
        CFBundleName = AdSheet;
        CFBundlePackageType = APPL;
        CFBundleResourceSpecification = "ResourceRules.plist";
        CFBundleShortVersionString = "1.0";
        CFBundleSignature = "????";
        CFBundleSupportedPlatforms =         (
            iPhoneOS
        );
        CFBundleVersion = "1.0";
        CLSystemService = 1;
        CLVisibleImmediately = 1;
        CanInheritApplicationStateFromOtherProcesses = 1;
        DTCompiler = "com.apple.compilers.llvm.clang.1_0";
        DTPlatformBuild = "";
        DTPlatformName = iphoneos;
        DTPlatformVersion = "7.0";
        DTSDKBuild = 11A450;
        DTSDKName = "iphoneos7.0.internal";
        DTXcode = 0500;
        DTXcodeBuild = 5A1344i;
        MinimumOSVersion = "7.0";
        NSPrincipalClass = ADSApplication;
        SBAppTags =         (
            hidden
        );
        SBMachServices =         (
            "com.apple.AdSheetPhone.server",
            "com.apple.AdSheetPhone.management",
            "com.apple.uikit.viewservice.com.apple.AdSheetPhone"
        );
        UIBackgroundModes =         (
            continuous
        );
        UIDeviceFamily =         (
            1,
            2
        );
        UIShouldIgnoreRemoteControlEvents = 1;
        UIStatusBarHidden = 1;
        UISupportedInterfaceOrientations =         (
            UIInterfaceOrientationPortrait,
            UIInterfaceOrientationPortraitUpsideDown,
            UIInterfaceOrientationLandscapeLeft,
            UIInterfaceOrientationLandscapeRight
        );
        UIViewServiceUsesNSXPCConnection = 1;
    }
)

I try to display the value and its key (or Dictionary for Dictionaries, Array for Arrays and Bool for Bools)

Then for example CanInheritApplicationStateFromOtherProcesses should show a 1 (wich is a BOOL), but is don't show any value. And CanInheritApplicationStateFromOtherProcesses is on index 0 of my UITableView, but it is on index 19 of the plist. Does anyone know how to fix this error. I am displaying the key in the cell.textLabel.text and the value in cell.detailTextLabel.text. Here is my code of - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"plist Cell" forIndexPath:indexPath];
id obj;
cell.textLabel.adjustsFontSizeToFitWidth = YES;
cell.detailTextLabel.minimumScaleFactor = 0.5;
cell.textLabel.font = [UIFont systemFontOfSize:14];
cell.detailTextLabel.font = [UIFont systemFontOfSize:13];
cell.editingAccessoryType = UITableViewCellEditingStyleNone;
if (self.plistDict) {
    NSString* key = [[self.plistDict allKeys] objectAtIndex:indexPath.row];

    cell.textLabel.text = key;
    obj = [self.plistDict objectForKey:key];
} else {
    cell.textLabel.text = [NSString stringWithFormat:@"%li", (long)indexPath.row];
    obj = [self.plistArray objectAtIndex:indexPath.row];
}
if(([obj isKindOfClass:[NSArray class]] || [obj isKindOfClass:[NSMutableArray class]]) && cell.tag == 0){
    cell.detailTextLabel.text = NSLocalizedString(@"Array", nil);
    cell.tag = 1;
    return cell;
} if(([obj isKindOfClass:[NSDictionary class]] || [obj isKindOfClass:[NSMutableDictionary class]]) && cell.tag == 0){
    cell.detailTextLabel.text = NSLocalizedString(@"Dictionary", nil);
    cell.tag = 2;
    return cell;
} if ([obj isKindOfClass:[NSString class]] && cell.tag == 0) {
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", (NSString *)obj];
    cell.tag = 3;
    return cell;
} if ([obj isKindOfClass:[NSNumber class]]) {
    if ([obj isKindOfClass:[@(YES) class]] && cell.tag == 0) {
        [boolSwitch setOn:(BOOL)obj animated:YES];
        [cell.contentView addSubview:boolSwitch];
        cell.detailTextLabel.textColor = [UIColor clearColor];
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.tag = 7;
        return cell;
    } else if (![obj isKindOfClass:[@(YES) class]] && cell.tag == 0) {
        cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", (NSNumber *)obj];
        cell.tag = 4;
        return cell;
    } else {
        return cell;
    }

} if ([obj isKindOfClass:[NSData class]] && cell.tag == 0) {
    cell.detailTextLabel.text = NSLocalizedString(@"Data", nil);
    cell.tag = 5;
    return cell;
} if ([obj isKindOfClass:[NSDate class]] && cell.tag == 0) {
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", (NSDate *)obj];
    cell.tag = 6;
    return cell;
} else {
    return cell;
}

The odd thing is for the most keys the value matches, but not for all.

Was it helpful?

Solution

cell will be reused with tag. so you maybe should reset the tag before reuse the cell:

//CustomeCell.m
- (void)prepareForReuse{
    [super prepareForReuse];
    self.tag = 0;

}

Or in tableView delegate class:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    cell.tag = 0;

}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top