在直到运行时才知道类名时,objective-c/Cocoa中是否有一种方法可以分配对象.我似乎刚才记得这件事,但现在找不到任何东西.
就像是:
[[@"MyClass" alloc] init];
Run Code Online (Sandbox Code Playgroud)
我似乎回想起一个函数,它会根据一个字符串返回某种类id,然后可以用它来分配对象.
在向Game Center提交成就的几乎所有例子中,我都看到了这段代码
[achievement reportAchievementWithCompletionHandler:^(NSError *error)
{
if (error != nil)
{
// Retain the achievement object and try again later (not shown).
}
}];
Run Code Online (Sandbox Code Playgroud)
问题是,一个小的评论是大约99%的工作.我花了最后几个小时试图解决这个问题,似乎是一组无休止的发送和重发以及保存和加载数据的边缘情况.
有没有人知道一个很好的教程(或示例代码),这实际上解释了困难的部分?
它并不像将它们保存到文件并稍后加载它们那么简单.当你开始不得不保留多个成就并在以后提交它们然后它们都回来失败(在块中!)你会遇到麻烦你必须再次保存它们......快速/安全...因为应用程序可能会退出并且你不想放松它们.
我把头发拉了出来.
我有这个(罕见的)奇怪的情况,我的Objective-c iOS程序正在锁定.当我进入调试器时,有两个线程,它们都被卡在@synchronized().
除非我完全误解@synchronized,否则我认为这不可能和命令的全部要点.
我有一个主线程和工作线程都需要访问SQLite数据库,所以我换的代码正在访问的@synchronized(MYDATABASE)块DB中的块.除了db访问之外,这些块中没有其他事情发生.
我也使用FMDatabase框架访问sqlite,我不知道是否重要.
myDatabase是一个包含FMDatabase对象的全局变量.它在程序开始时创建一次.
我正在尝试编写一个Photoshop脚本,它将显示给定名称的所有图层.我需要遍历所有可能的嵌套层集并使用以下代码:
function showBounds(layerNode)
{
for(var layer in layerNode.artLayers)
{
if (layer.name == "@bounds")
{
layer.visible = 1;
}
}
showBounds(layerNode.layerSets);
}
showBounds(app.activeDocument.doc.layerSets);
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我收到以下错误:
Error 1302: No such element
Line: 5
-> for(var layer in layerNode.artLayers)
Run Code Online (Sandbox Code Playgroud)
artLayers应该是LayerSets的属性,所以我很困惑.
这也是我第一次尝试脚本PS(和使用javascript),所以可能有一些我没有得到的基本概念.
我为 std::map 编写了一个比较函数,因此我可以拥有自定义键类型。
std::map<GGString *, GGObject *, GGDictionaryMapCompare> _map;
Run Code Online (Sandbox Code Playgroud)
...
class GGDictionaryMapCompare
{
public:
bool operator()(GGString * lhs, GGString * rhs)
{
return strcmp(lhs->str(), rhs->str()) < 0;
}
};
Run Code Online (Sandbox Code Playgroud)
添加元素的代码:
GGObject *GGDictionary::addKeyObject(GGString *theKey, GGObject *theObject)
{
if (theKey == NULL || theObject == NULL)
return NULL;
_map.insert(std::pair<GGString *, GGObject *>(theKey, theObject));
return theObject;
}
Run Code Online (Sandbox Code Playgroud)
导致崩溃的代码:
GGObject *GGDictionary::objectForKey(GGString *theKey)
{
if (theKey == NULL)
return NULL;
std::map<GGString *, GGObject *, GGDictionaryMapCompare>::iterator ii = _map.find(theKey);
if (ii == _map.end())
return NULL;
return …Run Code Online (Sandbox Code Playgroud) ios ×2
objective-c ×2
c++ ×1
cocoa ×1
game-center ×1
javascript ×1
photoshop ×1
sqlite ×1
stl ×1