В моем приложении мне нужно прочитать файл JSON, хранящийся в папке Documents моего iPhone. Я видел, что существует метод для объединения javascript и цели C. Как я могу это сделать? Я понимаю, что я должен использовать этот метод в объекте C - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
, но что я должен написать в javascript? Я нашел это: call objective C method from javascript, но я не понял, как это работает. В моем приложении я имею сделать это:Прочтите файл JSON из папки документов iOS с javascript
- Reach предложения от мобильного сайта (я сделал какой-нибудь мобильный сайт)
- Я хранить мобильный локальный сайт в папке Документы моего iPhone
- Я создаю файл JSON для сохранения имени, пути и даты истечения срока действия предложения. Я сохранил этот JSON в папке «Документы» моего iPhone. . .
- . У моего приложения есть контроллер просмотра «архив», в котором я загружаю мобильный сайт, на котором я буду перечислять все предложения, хранящиеся на устройстве, путем чтения созданного JSON.
Я создал собственное приложение, и он работает, теперь я должен реализовать метод для чтения файла JSON из папки «Документы», может ли кто-нибудь помочь мне сделать эту операцию? Как я могу прочитать JSON из javascript, проанализировать его и показать результат в динамическом списке html?
Спасибо
КОД UPDATE: пока я писал этот код:
Objective C сниппет
- (void)parseJson {
// Carico il documento JSON dalla cartella documents
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"data.json"];
BOOL fileExist = [[NSFileManager defaultManager] fileExistsAtPath:filePath];
if (fileExist) {
NSString *content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dictContent = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
if (dictContent) {
NSDictionary *sites = [dictContent objectForKey:@"sites"];
NSArray *site = [sites objectForKey:@"site"];
NSMutableArray *names = [[NSMutableArray alloc]init];
NSMutableArray *srcs = [[NSMutableArray alloc]init];
for (int i = 0; i < [site count]; i++) {
NSDictionary *dictData = [site objectAtIndex:i];
[names addObject:[dictData objectForKey:@"name"]];
[srcs addObject:[dictData objectForKey:@"src"]];
};
NSString *javascriptString = [NSString stringWithFormat:@"dataFromObjC([%@, %@])", names, srcs];
[self.webView stringByEvaluatingJavaScriptFromString:javascriptString];
}
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Promo" message:@"Non hai ancora salvato nessuna promozione!" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert show];
}
// Faccio il parse del documento JSON
// Passo le informazioni parsate al javascript
}
В JavaScript я сделал функцию с именем dataFromObjC(names, srcs)
. Ниже вы найдете HTML-код, чтобы увидеть то, что я сделал:
Html код
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
<title>Lista coupon</title>
<script src="../js/jquery-1.9.1.min.js" type="text/javascript"></script>
<script src="../js/memoria.js" type="text/javascript"></script>
<script type="text/javascript">
function dataFromObjC(names, srcs) {
alert(names);
alert(srcs);
}
</script>
<style type="text/css">
body {
background-color: #000000;
width: 100%;
height: 100%;
padding: 0;
margin: 0;
}
ul {
list-style-type: none;
padding: 5px;
}
li {
color: #FFFFFF;
font-family: sans-serif;
padding-bottom: 5px;
}
p {
color: #FFFFFF;
font-family: sans-serif;
padding: 5px;
text-align: center;
}
a {
text-decoration: none;
color: #FFFFFF;
}
</style>
</head>
<body onload="loadJson();">
<div id="header">
</div>
<div id="content">
<p>Di seguito trovi tutte le promozioni salvate</p>
<div id="list">
</div>
</div>
<div id="footer">
</div>
</body>
</html>
Я надеюсь, что это будет полезно для ее решения. Я использовал stringByEvaluatingJavaScriptFromString
, потому что я нашел здесь сообщение для чтения данных с объективного C на javascript.
Хорошо, я знаю это. Но я должен сделать это в javascript ... Как я могу это сделать? – lucgian84
Что вы думаете об этом [link] (https://github.com/marcuswestin/WebViewJavascriptBridge)? – lucgian84
Обновлены мои ан. – Horst