菜鸟教程小白 发表于 2022-12-12 14:21:22

ios - 自定义 plist 文件中的变量


                                            <p><p>我知道可以通过预处理 Info.plist 文件将变量存储在默认的 Info.plist 文件中。我想知道是否可以使用自定义 plist 文件做类似的事情。 </p>

<p>我通过以下代码加载 plist 文件:</p>

<pre><code>NSString *path = [ bundlePath];
NSString *customPlistPath = ;
NSDictionary *plistData = ;
</code></pre>

<p>是否可以输入 ${PRODUCT_NAME} 或 ${MY_OWN_VARIABLE_NAME} 之类的值,并在我读入自定义 plist 文件后对其进行处理?目前,当我将自定义 plist 文件读入 NSDictionary 时,变量值没有被替换</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>Cocoa Touch 框架中没有内置任何东西可以为您执行此操作。您必须编写自己的代码来在运行时处理这些值。我已经为我自己的应用程序做了这个。我在实用程序类中使用了这两种方法。</p>

<pre><code>+ (NSString *)processVariables:(NSString *)string {
    if (string.length == 0) {
      return string;
    }

    NSRange range = ;
    if (range.location != NSNotFound) {
      NSMutableString *res = ;
      do {
            NSRange close = ;
            if (close.location == NSNotFound) {
                break; // Uh-oh - bad
            }

            NSRange rngVar = NSMakeRange(range.location, close.location - range.location + 1);
            NSString *var = ;
            NSString *val = ;
            if (val) {
                ;
            } else {
                ;
            }

            range = ;
      } while (range.location != NSNotFound);

      return res;
    } else {
      return string;
    }
}

+ (id)expandPlistVariables:(id)root {
    if (]) {
      NSArray *array = (NSArray *)root;
      NSMutableArray *res = [ initWithCapacity:array.count];
      for (id obj in array) {
            if (]) {
                ];
            } else {
                id newObj = ;
                ;
            }
      }

      return res;
    } else if (]) {
      NSDictionary *dict = (NSDictionary *)root;
      NSMutableDictionary *res = [ initWithCapacity:dict.count];
      for (NSString *key in ) {
            id obj = dict;
            if (]) {
                res = ;
            } else {
                id newObj = ;
                res = newObj;
            }
      }

      return res;
    } else {
      // oops
      return root;
    }
}
</code></pre>

<p>您将传入从 plist 加载的字典(或数组)并返回一个新字典(或数组),其中包含变量引用的所有字符串值都已更新。</p>

<pre><code>NSString *path = [ bundlePath];
NSString *customPlistPath = ;
NSDictionary *plistData = ;
plistData = ;
</code></pre>

<p>在代码中,<code>variables</code> 是一个包含变量值的<code>NSDictionary</code>。此字典中的键是您的 plist 中 <code>${</code> 和 <code>}</code> 之间的值。示例:</p>

<pre><code>variables = @{ @&#34;PRODUCT_NAME&#34; : @&#34;MyProduct&#34;, @&#34;MY_OWN_VARIABLE_NAME&#34; : @&#34;Some Value&#34; };
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 自定义 plist 文件中的变量,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/18708278/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/18708278/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 自定义 plist 文件中的变量