Domanda

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.

È stato utile?

Soluzione

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;

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top