小编Ell*_* P.的帖子

Markdown for Cocoa应用程序的最简单实现是什么?

我正在Objective-C中编写一个Cocoa应用程序,我希望能够合并Markdown.用户将以Markdown语法输入文本,单击"导出"按钮,程序将输出XHTML文件.

但是,似乎有很多选择.我可以使用其中一个C/C++实现,我可以将Perl脚本作为资源运行到我的Cocoa应用程序,我假设可以使用Python实现和PyObjC桥接器或Perl实现以及CamelBones或PerlObjC桥接器.什么是最简单,最简单的解决方案?我没有做任何复杂的事情,比如需要线程的实时渲染预览.

perl markdown cocoa objective-c

23
推荐指数
4
解决办法
1万
查看次数

将字符串映射到一组字符串的Python字典?

我希望能够创建一个Python字典,其中字符串作为键,字符串集作为值.例如:{ "crackers" : ["crunchy", "salty"] }它必须是一个集合,而不是列表.

但是,当我尝试以下内容时:

  word_dict = dict()
  word_dict["foo"] = set()
  word_dict["foo"] = word_dict["foo"].add("baz")                                    
  word_dict["foo"] = word_dict["foo"].add("bang")
Run Code Online (Sandbox Code Playgroud)

我明白了:

Traceback (most recent call last):
  File "process_input.py", line 56, in <module>
    test()
  File "process_input.py", line 51, in test
    word_dict["foo"] = word_dict["foo"].add("bang")
AttributeError: 'NoneType' object has no attribute 'add'
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

  word_dict = dict()
  myset = set()
  myset.add("bar")
  word_dict["foo"] = myset
  myset.add("bang")
  word_dict["foo"] = myset

  for key, value in word_dict:                                                       
      print key,                                                                
      print value
Run Code Online (Sandbox Code Playgroud)

我明白了:

Traceback (most recent call last): …
Run Code Online (Sandbox Code Playgroud)

python dictionary set

15
推荐指数
3
解决办法
5万
查看次数

开源项目的多许可和许可兼容性?

我正在开始一个软件项目,我最终希望以免费,开源和免费的形式发布.

我的软件使用其他免费/开源软件,如Markdown(在BSD许可下发布),Blueprint CSS(在MIT许可下发布),以及其他使用各种许可(GPL等)的软件.有些是copyleft,有些则不是.

我也会为自己选择一个许可证.(还没有决定,但我确实有足够的资源来比较它们.)

我想知道是否有任何资源可用于导航许可兼容性这一令人困惑的世界.我用谷歌搜索,但没有找到太多.我知道有些许可证是"GPL兼容的",但我想知道:

1)哪些许可证要求衍生作品在同一许可下发布?

2)哪些流行的许可证彼此不兼容?

3)除了放弃你的希望和梦想或重新发明轮子之外,你能做些什么吗?

4)我读过在多个许可下发布软件允许用户选择他们喜欢的许可条款.一定是那样吗?如果我有两个兼容的许可证但我需要在两个版本下发布我的软件怎么办?因为我使用的某些代码要求基于其许可证?

如果它改变了什么,这个软件是为了一个学术项目.

我是程序员,不是律师!我很感激你的帮助.

licensing

11
推荐指数
1
解决办法
2758
查看次数

当我想要intValue时,如何防止自己意外使用NSNumber的指针?

我真正喜欢的Java的一个特性是自动装箱,其中编译器自动在基元和它们的包装类之间进行转换.

我正在Objective-C/Cocoa中编写一个Core Data应用程序,我发现以编程方式处理我的整数属性令人沮丧.原因如下:

//img is a managed object that I have fetched

NSString* filename = [NSString stringWithFormat:@"image%d.png", [[img valueForKey:@"imageID"] intValue]];  
Run Code Online (Sandbox Code Playgroud)

如果我碰巧忘记了intValue我有时会做的消息,那么传递给stringWithFormat:它的int 实际上就是指针值.

问题是这种情况完全无声地发生 - 没有编译器错误或警告.有时我会花太多时间调试这个愚蠢,愚蠢的问题.

有没有办法改变我的编程风格或我的编译器设置,以防止我陷入陷阱?

编辑:我不清楚上面这个例子只是我遇到麻烦的地方之一.这是另一个与字符串无关的假设示例:

实体CollegeClass有两个整数属性:courseNumberenrollmentLimit.假设我想比较课程编号:

//classFoo is a NSManagedObjects I've fetched
if ([[classFoo valueForKey@"courseNumber"] intValue] < 400) {
    NSLog(@"undergraduate class");
}
Run Code Online (Sandbox Code Playgroud)

或者类似地,假设我想计算CS部门中所有课程的平均注册限制.

java autoboxing cocoa objective-c nsnumber

2
推荐指数
1
解决办法
295
查看次数

如何在Cocoa中为用户选择实现基于缩略图的视图?

我有我认为非常简单的需求,但我不知道如何实现它.

在我的界面中的各个点,要求用户选择一些相当可视的内容(例如选择页面布局或颜色选项.)这些选择是从预定义的选项集中进行的.通常你会使用NSPopUpButton,或者可能是NSTableView,但我希望用户能看到每个选择选项的缩略图.这些缩略图也应该是一个不错的尺寸 - 至少100x100像素.每个缩略图还应附有文本标签.一次只允许一个选择.

Apple在iWeb中实现了类似的功能:

iweb http://img187.imageshack.us/img187/5744/iweb.jpg

当然,你习惯用小图标看到这样的东西:

xcode http://img690.imageshack.us/img690/7851/ixcode.jpg

我认为NSCollectionView是开始的地方,但我只看到过在更复杂的情况下使用它(例如:显示目录的内容,支持拖放等)因此,大多数情况下我发现的代码相当复杂.

是否有一个更简单的解决方案,用静态的,预定义的数据填充此视图,只是允许简单的选择?换句话说,我正在寻找弹出按钮的功能,但不同的用户界面.

更新:解决方案

我建议使用IKImageBrowser.本教程非常有用.在IB中:我在界面中创建了一个IKImageBrowser,将其包装在滚动视图中,并使其成为浏览器对象的数据源.在代码中:在我的控制器中实现数据源协议,如教程所述,将allowsMultipleSelection和allowsEmptySelection设置为NO,使用完全如教程中所述的URL图像表示创建自定义图像对象.

然后,为了获得选择,我写了以下方法,当用户单击"确定"按钮时触发:

NSIndexSet *retval = [imageBrowser selectionIndexes];
NSInteger i = [retval firstIndex];  //the index of the selection. Corresponds to index in my array data source
NSString* path = [[styleViewData objectAtIndex:i] imageRepresentation]; //path to selected image, if you need it
Run Code Online (Sandbox Code Playgroud)

本教程非常有用 - 只需忽略添加图像和缩放滑块等内容.

user-interface cocoa nscollectionview ikimagebrowserview

1
推荐指数
1
解决办法
2355
查看次数