NSMutableArray
является подклассом NSArray
, поэтому вам не всегда нужно конвертировать, но если вы хотите убедиться, что массив не может быть изменен, вы можете создать NSArray
любым из этих способов в зависимости от о том, хотите ли вы автоматически выпустить или нет:
/* Not autoreleased */
NSArray *array = [[NSArray alloc] initWithArray:mutableArray];
/* Autoreleased array */
NSArray *array = [NSArray arrayWithArray:mutableArray];
РЕДАКТИРОВАТЬ: Решение , предоставленное Георгом Шолли, является лучшим способом сделать это и намного чище, особенно теперь, когда у нас есть ARC, и нам даже не нужно вызывать autorelease.
Проведя несколько минут в Firebug, есть несколько способов сделать это. кажется. Например, я смог получить список файлов из самого fileObject:
var file = $("#control").attr("files")[0];
var fileName = file.fileName;
var fileSize = file.fileSize;
alert("Uploading: "+fileName+" @ "+fileSize+"bytes");
Ясно, что я могу прочитать значения для сериализации. Но письмо - это другой вопрос.
Но, очевидно, это не так просто, как утверждают другие. Я взял на себя смелость загрузить исходный код Prototype и не смог узнать, где находятся инструкции по использованию данных FileList для объекта File Upload.
Фактически, Я нашел в Интернете статью, в которой перечислялись проблемы с сериализацией самого объекта загрузки файла, утверждая, что ни одна библиотека AJAX не справилась с этим хорошо (заметьте, это было написано в 2007 году). Тем не менее, эта тема интересна, и кажется, что вы можете разработать любое количество методов для извлечения данных из загрузки файла - сама спецификация содержит достаточно информации, которая поможет вам пройти этот путь.
ответ о том, как вы можете писать и добавлять файлы в список файлов, но на данный момент я так же потерялся, как и вы (или был в момент, когда задавал этот вопрос). Если немного почитать, это может оказаться намного проще, чем я подозреваю, но на данный момент у меня нет времени вкладывать средства.
Удачи.
Я не думаю, что это возможно с помощью tf.exe или даже tfpt.exe (командная строка Power Tool) . Вам нужно будет просмотреть ожидающие ревизии изменения, которые являются блокировками. Вы можете сделать это в PowerShell с помощью командлетов Power Tool или с помощью следующего фрагмента кода .NET, который использует TFS API:
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
namespace TfsApiExample
{
class Program
{
static void Main(string[] args)
{
GetLockedFiles("http://tfsserver:8080","$/TeamProject");
}
private static void GetLockedFiles(string serverUrl, string serverPath)
{
TeamFoundationServer tfs = new TeamFoundationServer(serverUrl);
VersionControlServer vcServer = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
// Search for pending sets for all users in all
// workspaces under the passed path.
PendingSet[] pendingSets = vcServer.QueryPendingSets(
new string[] { serverPath },
RecursionType.Full,
null,
null);
Console.WriteLine(
"Found {0} pending sets under {1}. Searching for Locks...",
pendingSets.Length,
serverPath);
foreach (PendingSet changeset in pendingSets)
{
foreach(PendingChange change in changeset.PendingChanges)
{
if (change.IsLock)
{
// We have a lock, display details about it.
Console.WriteLine(
"{0} : Locked for {1} by {2}",
change.ServerItem,
change.LockLevelName,
changeset.OwnerName);
}
}
}
}
}
}