我正在创建一个需要从网页获取一些数据的iOS应用程序.我的第一个是使用NSXMLParser initWithContentsOfURL:
和解析NSXMLParser
代表的HTML .然而,这种方法似乎很快就会变得痛苦(例如,如果改变了HTML,我将不得不重写解析代码,这可能很尴尬).
看到我正在加载一个网页,我也看了一下UIWebView
.看起来UIWebView
可能是要走的路.stringByEvaluatingJavaScriptFromString:
似乎是一种非常方便的方法来提取数据,并允许将javascript存储在一个单独的文件中,如果HTML发生变化,该文件很容易编辑.然而,使用UIWebView
似乎有点hacky(看作UIWebView
是一个UIView
子类,它可能会阻止主线程,并且文档说javascript有10MB的限制).
在我遇到困难之前,有没有人对解析XML/HTML有任何建议?
更新:
我写了一篇关于我的解决方案的博客文章:iOS中的HTML解析/屏幕抓取
如何分析以下两行代码?
w += /* 28 + */ y % 4 == 0 && (y % 100 || y % 400 ==0);
Run Code Online (Sandbox Code Playgroud)
和
w += 30 + (i % 2 ^ i >= 8);
Run Code Online (Sandbox Code Playgroud) 给定一个抽象接口和从该接口派生的实现,其中构造函数受到保护(这些对象的创建只能从类工厂中获得 - 实现DI模式),如何在工厂函数中使用make_shared?
例如:
class IInterface
{
public:
virtual void Method() = 0;
};
class InterfaceImpl : public IInterface
{
public:
virtual void Method() {}
protected:
InterfaceImpl() {}
};
std::shared_ptr<IInterface> Create()
{
std::shared_ptr<IInterface> object = std:: make_shared<InterfaceImpl>();
return object;
}
Run Code Online (Sandbox Code Playgroud)
make_shared显然无法访问InterfaceImpl中的受保护构造函数,或者实际上是在IInterface中,给出了以下错误
error C2248: 'InterfaceImpl::InterfaceImpl' : cannot access protected member declared in class 'InterfaceImpl'
Run Code Online (Sandbox Code Playgroud)
所以在这里阅读(问题:如何使boost :: make_shared成为我班级的朋友),我尝试将以下内容放入实现类中:
friend std::shared_ptr<InterfaceImpl> std::make_shared<InterfaceImpl>();
Run Code Online (Sandbox Code Playgroud)
它仍然无法编译.那么我也将另一个放入IInterface类.仍然没有快乐.我在这做错了什么?
编辑:用于编译的完整源文件,与"朋友"...
#include <memory>
class IInterface
{
public:
friend std::shared_ptr<IInterface> Create();
virtual void Method() = 0;
};
class …
Run Code Online (Sandbox Code Playgroud) 参数化类型(如C++模板)是一件好事,但大多数时候它们只能通过其他类型进行参数化.
但是,在C++中有一个特殊情况,可以通过整数对模板进行参数化.例如,固定长度数组是一个典型的用例:
template<typename T, int SIZE> class FixedArray
{
T m_values[SIZE];
public:
int getElementCount() const { return SIZE; }
T operator[] (int i) const {
if (i<0 || i>=SIZE)
throw;
else
return m_values[i];
}
};
void f()
{
FixedArray<float, 5> float_array; // Declares a fixed array of 5 floats.
//The size is known at compile time, and values are allocated on the stack.
}
Run Code Online (Sandbox Code Playgroud)
在C++中只允许使用常量整数和指针,但我认为使用任何值进行参数化(浮点数,类实例等)可能会很有趣.这可以允许在编译时表达前提条件(通常在文档中非正式指定),并在运行时自动检查它们.例如,这是假设的C++方言中的"Interval"模板:
// Interval of type T between TMin and TMax.
template<typename T, T TMin, T TMax> …
Run Code Online (Sandbox Code Playgroud) 有什么区别:
git add .
git commit -a
我应该做两件事,还是多余的?
我需要基本上做一个"sudo"但是,我需要给我的NSTask代码提供这种权限.这可能吗?
谢谢,以利亚
我尝试了以下代码:
int main()
{
int x {23.22};
}
Run Code Online (Sandbox Code Playgroud)
其中包括需要缩小的初始化,但代码编译正常,没有任何错误或警告.另一方面,以下代码给出错误:
int main()
{
int x[]{23.22};
}
Run Code Online (Sandbox Code Playgroud)
我发现了一个bug还是什么?
PS:我目前正在使用GCC 4.5.0
我有以下代码:
int intNumber1 = 100;
object intNumber2 = 100;
bool areNumberOfTheSameType = intNumber1.GetType() == intNumber2.GetType(); // TRUE
bool areEqual = intNumber1.Equals(intNumber2); // TRUE
long longNumber1 = (long) intNumber1; // OK
long longNumber2 = (long) intNumber2; // InvalidCastException. Why?
Run Code Online (Sandbox Code Playgroud)
为什么第二次演员不工作?我意识到这可能是因为对象没有显式转换为long,但如果我们在运行时查看它的类型就是System.Int32
.
如果我使用var
或dynamic
代替object
,它的工作原理.
有什么想法吗?
我有一个像这样的数组:
private static int[] f_arme = {
R.drawable.frankiearmevor_0001,
R.drawable.frankiearmevor_0002,
R.drawable.frankiearmevor_0003,
R.drawable.frankiearmevor_0004,
R.drawable.frankiearmevor_0005
Run Code Online (Sandbox Code Playgroud)
}
我如何获得该数组的大小(f_arme)?= 5我尝试了f_arme.size()但得到"无法调用数组类型int []上的size()
c++ ×3
.net ×1
android ×1
c ×1
c# ×1
c++11 ×1
clr ×1
constructor ×1
g++ ×1
git ×1
git-add ×1
git-commands ×1
git-commit ×1
ios ×1
iphone ×1
java ×1
make-shared ×1
narrowing ×1
nstask ×1
nsxmlparser ×1
objective-c ×1
permissions ×1
protected ×1
sudo ×1
type-systems ×1
uiwebview ×1