iphone - 写入 plist 字典中的字符串
<p><p>我使用的 plist 结构如下:plist, array, dict key string key string/dict, dict key string key string/dict,/array,/plist.</p>
<p>我想要使用以下代码<em>将当前字典中的“完成”字符串的值设置为"is"。</em></p>
<p>但是现在,代码<em>用当前字典的字符串替换了整个字典数组</em>(不过,“完成”键的值应该是"is"。)</p>
<p>什么是我想要的正确代码?</p>
<p>在 DetailViewController.m 中:</p>
<pre><code>-(IBAction)favoriteButtonPressed:(id)sender
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = ;
NSString *path = ;
[ setValue:@"Yes" forKey:@"Done"];
[ writeToFile:path atomically:YES];
}
</code></pre>
<p>detailsDataSource 和 detailIndex 是从 TableViewController.m segue 收到的。</p>
<p>TableViewController.m segue 部分:</p>
<pre><code> detailViewController.detailsDataSource = [initWithArray:objectsArray];
detailViewController.detailIndex = selectedRowIndex.row;
</code></pre>
<p>DetailViewController viewDidLoad</p>
<pre><code>if ([[ valueForKey:@"Favorite"] isEqual:@"Yes"]){
forState:UIControlStateSelected | UIControlStateHighlighted];
}
districtLabel.text = [ valueForKey:@"District"];
</code></pre>
<p>detailsDataSource 数组在 detailViewController 中像这样使用,所以我不能从数组更改为字典,在这种情况下必须制作一个可变副本。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p><code>setValue:forKey</code> 不用于修改可变字典。您应该使用 <code>setObject:forKey</code>。即,这个:</p>
<pre><code>[ setValue:@"Yes" forKey:@"Done"];
</code></pre>
<p>应该是:</p>
<pre><code>[ setObject:@"Yes" forKey:@"Done"];
</code></pre>
<p>如果这不能解决问题,请确保字典和数组都是可变的:</p>
<pre><code>-(IBAction)favoriteButtonPressed:(id)sender {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = ;
NSString *path = ;
NSMutableDictionary *mutDict = ];
;
NSMutableArray *tmpMutArr = ;
];// make dict immutable before replacing.Casting it ( (NSDictionary *)mutDict ) works too.
, detailsDataSource = nil;
detailsDataSource = [ initWithArray:tmpMutArr];
;
}
</code></pre>
<hr/>
<p>另外,您可以使用 <code></code> 代替 <code>@"Yes"</code>:<br/>
<code> forKey:@"Done"];</code><br/>
通常会比使用 <code>@"Yes"</code> 更好。</p>
<p>还有:</p>
<pre><code>districtLabel.text = [ valueForKey:@"Yes"];
</code></pre>
<p>应该是:</p>
<pre><code>districtLabel.text = [ objectForKey:@"Yes"];
</code></pre>
<hr/>
<p>还注意到您<em>可能</em>存在内存泄漏:</p>
<pre><code>detailViewController.detailsDataSource = [ initWithArray:objectsArray];
</code></pre>
<p>确保在使用保留的属性 setter 时自动释放。</p></p>
<p style="font-size: 20px;">关于iphone - 写入 plist 字典中的字符串,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/11923593/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/11923593/
</a>
</p>
页:
[1]