所以这是我的代码。我正在尝试将plist中的内容显示到表中,并且我一直遇到错误。我整天都在这,所以我可能会错过一些相当容易的东西。希望你们能弄清楚为什么当我建造时,桌子是空的。
这是我的plist(没有标题):
<array>
<dict>
<key>word</key>
<string>AWord1</string>
<key>definition</key>
<string>here is a definition</string>
<key>partOfSpeech</key>
<string>here is a part of speech</string>
</dict>
<dict>
<key>word</key>
<string>Bword1</string>
<key>definition</key>
<string>here is a definition</string>
<key>partOfSpeech</key>
<string>here is a part of speech</string>
</dict>
</array>
</plist>
编辑:由于格式错误而导致结束标记丢失 - 已修复
确定。这是我的新代码。我NSLog'd并决定在我去plist之前回来。所以,如果你能提供帮助的话。您如何建议我从plist中提取此数据(假设数据在plist中)
//Initialize the array.
listOfItems = [[NSMutableArray alloc] init];
NSArray *countriesToLiveInArray = [NSArray arrayWithObjects:@"Iceland", @"Greenland", @"Switzerland", @"Norway", @"New Zealand", @"Greece", @"Italy", @"Ireland", nil];
NSDictionary *countriesToLiveInDict = [NSDictionary dictionaryWithObject:countriesToLiveInArray forKey:@"Countries"];
NSArray *countriesLivedInArray = [NSArray arrayWithObjects:@"India", @"U.S.A", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", @"Test", nil];
NSDictionary *countriesLivedInDict = [NSDictionary dictionaryWithObject:countriesLivedInArray forKey:@"Countries"];
[listOfItems addObject:countriesToLiveInDict];
[listOfItems addObject:countriesLivedInDict];
//Initialize the copy array.
copyListOfItems = [[NSMutableArray alloc] init];
//Set the title
self.navigationItem.title = @"Countries";
//Add the search bar
self.tableView.tableHeaderView = searchBar;
searchBar.autocorrectionType = UITextAutocorrectionTypeNo;
searching = NO;
letUserSelectRow = YES;
我觉得好像我还没有告诉它解析plist中的数据。我只是初学了。想法?
答案 0 :(得分:1)
你的代码似乎非常不完整,它与plist没有多大关系。以下是一些问题
</array>
标签(但我们假设这是问题中的拼写错误)countriesToLiveIn
字典中的单个条目中(针对关键字“定义”)countriesToLiveIn
成为数组listOfItems
copyOfListItems
数组,但之后不对其执行任何操作然后你没有指出表格从哪里得到它的日期。
如果它来自copyOfListItems
,那么该数组是空的。:空表。
如果来自listOfItems
,你将以某种方式解析countriesToLiveIn
字典,但是你没有说明如何。
如果它直接来自plist数组countriesToLiveInArray
,那么缺少</array>
标记可能是一个线索。您还需要以某种方式解析数组包含的字典,并且您没有向我们展示该代码,那里可能存在问题。
为了进一步了解这一点,我建议大量使用NSLog
来了解数据进入对象的距离。如果你仍然陷入困境,也许你可以用结果扩展你的问题。
<强>更新强>
根据您更新的代码,我首先怀疑您的网址存在问题。
在您之前的编辑中,这是可疑行
NSMutableArray *wordListArray = [[NSMutableArray alloc] initWithContentsOfURL: [NSURL URLWithString:@"http://url.com/dictpPlist.plist"]];
你需要在它之后立即使用NSLog:
NSLog (@"wordListArray %@", wordListArray);
确认您没有在这里拿起plist。至少那时我们在你的代码中将问题隔离到了这一点。
然后我们需要质疑网址 - 它是否正确?那个plist是怎么到达那里的?你可以独立验证吗?它是本地文件URL还是网络URL?
如果您正在访问网络资源,这很可能是您的问题。 initWithContentsOfURL
方法应该只与本地文件系统URL一起使用。参见例如
initwithcontentsofurl methods considered harmful。
您应该异步使用NSURLConnection
。 Apple是a little cagey about this also:
aURL :包含由
writeToURL:atomically:
方法生成的数组的字符串表示形式的文件的位置。
假设这是您的问题,为什么不首先使用本地文件系统plist。
在listOfItems
数组的代码中写一个:
- (void) createPlist
{
NSFileManager* fManager = [NSFileManager defaultManager];
NSError* error;
NSURL* docsURL = [fManager URLForDirectory:NSDocumentDirectory
inDomain:NSUserDomainMask
appropriateForURL:nil
create:NO
error:&error];
NSURL* plistURL = [docsURL URLByAppendingPathComponent:@"testlist.plist"];
[listOfItems writeToURL:plistURL atomically:YES];
}
重新阅读,验证它是否有效,然后理清如何通过网络进行相同操作。
答案 1 :(得分:-2)
尝试以下代码
// Path to the plist (in the application bundle)
NSString *path = [[NSBundle mainBundle] pathForResource:
@"dictpPlist" ofType:@"plist"];
// Build the array from the plist
NSMutableArray *array2 = [[NSMutableArray alloc] initWithContentsOfFile:path];
// Show the string values
for (NSString *str in array2)
NSLog(@"--%@", str);